全力で怠けたい

怠けるために全力を尽くしたいブログ。

shebang はシェル以外の実行可能ファイルも指定できるメモ。

shebang はシェル以外の実行可能ファイルを指定できるのを知ったので書いておく。

shebang はシェル以外の実行可能ファイルも指定できる

自分はなんとなく shebangシェルスクリプトにしか書いてこなかったけど、shebangスクリプトを読み込むインタプリタを指定するものなので普通にシェル以外の実行可能ファイルを指定することができる。

ちなみに shebangシェルスクリプトの先頭行に書くやつ。こういうの。

#!/bin/bash

sed スクリプトファイルの shebang

当たり前だけど sedスクリプトファイルは shebang を書くことができる。

例として入力の先頭行と最終行を削除する sedスクリプトを作って実行してみる。 入力の先頭行と最終行を削除する sedスクリプトdelete-first-and-last-lines.sed という名前で保存と実行権限を付けておくと、普通に実行可能ファイルみたいにして実行できる。

$ cat ./delete-first-and-last-lines.sed
#!/usr/bin/env sed -f

1d
$d

$ seq 1 5 | ./delete-first-and-last-lines.sed
2
3
4

shebang を書いている sedスクリプトファイルは普通に -f オプションで指定することもできる。

$ seq 1 5 | sed -f ./delete-first-and-last-lines.sed
2
3
4

awk スクリプトファイルの shebang

当たり前だけど awkスクリプトファイルも shebang を書くことができる。

例として入力の自乗を表示するスクリプトを作って実行してみる。 入力の自乗を表示する awkスクリプトpow.awk という名前で保存と実行権限を付けておくと、普通に実行可能ファイルみたいにして実行できる。

$ cat ./pow.awk
#!/usr/bin/env awk -f
{printf("%d\n", $0*$0)}

$ seq 1 5 | ./pow.awk
1
4
9
16
25

shebang を書いている awkスクリプトファイルは普通に -f オプションで指定することもできる。

$ seq 1 5 | awk -f ./pow.awk
1
4
9
16
25

shebang に書くパス

shebang#!/usr/bin/env sed -f にしてるけど #!/usr/bin/sed -f みたいに自分の環境での sed のパスをベタで書いてもちゃんと動く。 こういう書き方は可搬性は下がっちゃうけど、自分は sed とか awkスクリプトファイルを普段自分が作業している環境以外に持っていって動かすことはほとんどないので、こういう書き方でもいいかなーって思ってる。

参考サイト