シェルスクリプトにシバン(#!/bin/sh)はないほうがいいという説

職場のパソコンで作業用にシェルスクリプトを書いていた。PATH変数の初期化に使っていたgetconfコマンドがないことを発端に,getconfのない環境でのPATH変数の初期化から,Androidで動くシェルスクリプトについて議論が発展した。 その中で,Androidでも動くシェルスクリプトを書くためには,シバン(#!/bin/sh)を書いてはいけないという結論が得られた。 一連の議論を記録として残す。 続きを読む
10
前へ 1 ・・ 9 10
. @senopen

@senopen デメリットがないというのは嘘で、例えば、bashだとaliasが展開されないという問題がある。shopt expandaliasを有効化してもいいが、aliasを関数にすればいいだけだから、すぐに解決できる。

2017-03-30 09:22:37
. @senopen

@senopen 確認していたのだけど、msys2とかcygwinだとシバンがないとファイルの実行権限が有効にならないのかな?この仕様はなんだろう。

2017-03-30 10:09:33
. @senopen

@senopen lsのバグかな。別に実行権限なくても実行できたし、シバンつけたファイルに自分て実行権限つけてないけど、勝手についていたし…

2017-03-30 10:18:55
. @senopen

@senopen 一通り確認できた。検証コード : ps.sh ps | grep $$ ./ps.shで対話シェル実行 jsh,pdksh,fish,zsh,ash,bash,dash,ksh88,ksh93,csh,tcsh。どれもsh,ksh,ksh93,bashのどれか

2017-03-30 22:31:44
. @senopen

@senopen 1点気になったのが,fishの-c fish -c './ps.sh' これだけ反応がなかった。けれど,対話シェルからだと問題なく実行できた。他は-c './ps.sh'でも実行可。 fishはPOSIX未定義コマンド。fish -cで使うことはないだろう

2017-03-30 22:33:51
. @senopen

@senopen mkshも確認していた。結果リストに載せるのを忘れた。 年度が変わるまでに,一気に問題が解決してすっきりした。 シバン,ksh88のset -uの$@,Solaris 10のjsh。 よかった。後で全部ブログにきっちりまとめる。 あとはメイン作業に着手だな…

2017-03-30 22:38:29
前へ 1 ・・ 9 10