{〈Vim〉}{構文強調}{仕類即譜}{やりたい}(4)

{Vimの仕類即譜用の構文強調における命令語を動的に生成する K#D657/9D87}

for s:pathdir in
	\ getenv('PATH')
	\ ->split(':')
	\ ->filter({_, v ->
	           \ isdirectory(v)})
	for s:binfile in
		\ readdirex(s:pathdir,
		           \ {e ->
		           \   e.type == 'file' &&
		           \   e.perm =~ '..x..x..x'},
		           \ #{sort: 'none'})
		echo s:pathdir .. '/' .. s:binfile.name
	endfor
endfor

Windowsでやるときは実行属性じゃなくて拡張子がPATHEXTにあるかどうかで判断する。

{CMake}{可搬性}{仕類即譜}(3)

{OS横断的な仕類即譜様言語としてのCMake K#D657/9B2F}

動機

最近シェルスクリプト代わりにCMakeを使っている

CMake's -P script mode if you want to take CMake as a cross-platform scripting environment


たしかに譜類を生成できるfileみたいな命令もあるし,けっこう良いかも?

{〈Minecraft〉}{Minecraft提供方を〝良い感じ〟の使役として稼動させる}{/usr/local/sbin/mcsrv}{Minecraft提供方}{仕類即譜}(5)

{mcsrv.sh K#D657/EC91}

#!/bin/sh
set -o errexit
set -o nounset
set -o noclobber
umask 0022
# shellcheck disable=SC2155
export PATH="$(command -p getconf PATH)${PATH:+:$PATH}"
export POSIXLY_CORRECT='200809' UNIX_STD='2003' \
       COMMAND_MODE='unix2003' XPG_SUS_ENV='ON'
atexit() { set -- "$1" $?
        echo 'stop' > "${0%/*}/mcsrv.in"
        trap - EXIT
        exit $2
}

trap "atexit "'"'"$1"'"' EXIT HUP INT QUIT ABRT ALRM TERM

set -- "${0%/*}/mcsrv.in" "$@"
[ -p "$1" ] || { rm -rf "$1" && mkfifo "$1"; }
shift

cd "${0%/*}/" &&
tail -f "${0%/*}/mcsrv.in" |
java @user_jvm_args.txt -jar ./server.jar "$@" |
sed -n -e '
読み込み中...
{Minecraftの柔輪結規制に対応する}{仕類即譜}(2)

{genmcslal.sh K#D657/0593}

#!/bin/sh

# NAME: genmcslal.sh - generate Minecraft's symbolic link arrow list
# USAGE: genmcslal.sh <launcher_dir>
# EXSAMPLE: genmcslal.sh ~/.config/minecraft/
set -o errexit
set -o nounset
set -o noclobber
umask 0022
# shellcheck disable=SC2155
export PATH="$(command -p getconf PATH)${PATH:+:$PATH}"
export POSIXLY_CORRECT='200809' UNIX_STD='2003' \
       COMMAND_MODE='unix2003' XPG_SUS_ENV='ON'
< $1/launcher_profiles.json \
jq -r '.profiles[].gameDir' |
xargs -E '' -I \{\} \
  find \{\} -type l -exec readlink \{\} \;
{POSIX仕類即譜}{可搬運用機構界面}{仕類即譜}(3)

{あれ K#D657/71E3}

set -o errexit
set -o nounset
set -o noclobber
umask 0022
# shellcheck disable=SC2155
export PATH="$(command -p getconf PATH)${PATH:+:$PATH}"
export POSIXLY_CORRECT='200809' UNIX_STD='2003' \
       COMMAND_MODE='unix2003' XPG_SUS_ENV='ON'
(1){yday.sh}
{yday.sh}{あれ}{紀元秒}{仕類即譜}(4)

{epocsec.sh K#D657/1C6E}

なんかdate +'%s'の結果と微妙にずれる。
なんで???

#!/bin/sh

# epocsec.sh -- 紀元秒を算出する
# epocsec.sh YYYY MM DD hh mm ss
set -o errexit
set -o nounset
set -o noclobber
umask 0022
# shellcheck disable=SC2155
export PATH="$(command -p getconf PATH)${PATH:+:$PATH}"
export POSIXLY_CORRECT='200809' UNIX_STD='2003' \
       COMMAND_MODE='unix2003' XPG_SUS_ENV='ON'
読み込み中...
{あれ}{yday.epl.sh}{通年日}{仕類即譜}(4)

{yday.sh K#D657/7674}

#!/bin/sh

# yday.sh -- 通年日を算出する
# yday.sh YYYY MM DD
set -o errexit
set -o nounset
set -o noclobber
umask 0022
# shellcheck disable=SC2155
export PATH="$(command -p getconf PATH)${PATH:+:$PATH}"
export POSIXLY_CORRECT='200809' UNIX_STD='2003' \
       COMMAND_MODE='unix2003' XPG_SUS_ENV='ON'
set -- $2 $3 \
  $(( ($1 % 4) || ( ! ($1 % 100) && ($1 % 400) ) ? 28 : 29 ))

set -- $1 \
  0               $2   31              $2   $(( $3 +  31 )) $2 \
  $(( $3 +  62 )) $2   $(( $3 +  92 )) $2   $(( $3 + 123 )) $2 \
  $(( $3 + 153 )) $2   $(( $3 + 184 )) $2   $(( $3 + 215 )) $2 \
  $(( $3 + 245 )) $2   $(( $3 + 276 )) $2   $(( $3 + 306 )) $2

shift $(( 1 + ($1 - 1) * 2 ))

echo $(( $1 + $2 ))
{あれ}{通年日}{仕類即譜}(3)

{yday.epl.sh K#D657/C21C}

#!/bin/sh

# yday.sh -- 通年日を算出する(算法・実装明示用)
# yday.sh YYYY MM DD

set -- $1 $2 $3

# 検算用
printf 'Assertion: '
date +'%j' -d "$1-$2-$3"

# 月・日の参照保存および各月の日数。
# 2月については閏年の計算を行う。
set -- $2 $3 \
  31 \
  $(( ($1 % 4) || ( ! ($1 % 100) && ($1 % 400) ) ? 28 : 29 )) \
  31 \
  30 \
  31 \
  30 \
  31 \
  31 \
  30 \
  31 \
  30

# 月・日の参照保存(shift後に日数を使うので日数を前方に置かない)および
# 各月の前月までの総日数。なお,1月については0日とする。
set -- $1 \
  0 $2 \
  $3 $2 \
  $(( $3 + $4 )) $2 \
  $(( $3 + $4 + $5 )) $2 \
  $(( $3 + $4 + $5 + $6 )) $2 \
  $(( $3 + $4 + $5 + $6 + $7 )) $2 \
  $(( $3 + $4 + $5 + $6 + $7 + $8 )) $2 \
  $(( $3 + $4 + $5 + $6 + $7 + $8 + $9 )) $2 \
  $(( $3 + $4 + $5 + $6 + $7 + $8 + $9 + ${10} )) $2 \
  $(( $3 + $4 + $5 + $6 + $7 + $8 + $9 + ${10} + ${11} )) $2 \
  $(( $3 + $4 + $5 + $6 + $7 + $8 + $9 + ${10} + ${11} + ${12} )) $2 \
  $(( $3 + $4 + $5 + $6 + $7 + $8 + $9 + ${10} + ${11} + ${12} + ${13} )) $2

# 与月の前月までの日数を`$1`で参照できるようにする。
shift $(( 1 + ($1 - 1) * 2 ))

# 通年日 = 与月の前月までの日数 + 与日
printf 'Calculation: %d\n' $(( $1 + $2 ))
(1){yday.sh}
{通年日}{仕類即譜}(2)

{あれ K#D657/8D6E}

#!/bin/sh

# 与えられた年の2月の日付を求める

set -- $1

# |  % 4  | % 100 | % 400 || leap? |
# |-------+-------+-------++-------|
# |   F   |   -   |   -   ||   F   |
# |   T   |   F   |   -   ||   T   |
# |   T   |   T   |   F   ||   F   |
# |   T   |   T   |   T   ||   T   |
echo $((
($1 % 4) || ( ! ($1 % 100) && ($1 % 400) ) ? 28 : 29
))

# for check
expr $(date +'%j' -d "$1-$2-$3") - $((31 + 1))
読み込み中...
{仕類即譜}

{}