
現在、POSIX仕様は.
組み込みドットのオプションを指定しません。
私が次のことをするなら:
$ echo 'echo .' > /tmp/-foo
$ PATH=/tmp "$shell" -c '. -foo'
これにより、他のシェルの結果が異なります。
dash
,ash
,ksh88
, Bourne shell, schily sh, schily osh, heirloom sh がうまく動作します。bash
、、、、、、、いいえ。yash
これらのシェルで実行されるようにコマンドを変更します。ksh93
pdksh
mksh
posh
. -- -foo
しかも使用する--
のは非互換的な方法なのでPOSIX仕様によると組み込み型は以下に従わない。ユーティリティ構文ガイド無視されます--
。
zsh
どちらの場合でも動作する唯一のシェルです。
. filename
それでは、BourneやPOSIXなどのシェルでこれを確実に動作させるにはどうすればよいですか?
答え1
シェル関連の効果を避けるためにフルパスを.
。. /absolute/path/to/script
. relative/path/to/script
とにかく、パスルックアップはソーススクリプトにはほとんど役に立ちません。 PATH検索が必要な場合は、ファイル名がで始まる場合は手動で検索できます。あるいは、単純にするために-
ファイル名がで始まらないようにすることもできます。-
答え2
私はこれが部分的に理論的な質問だと思います。
埋め込みスクリプトの最初の文字になるのを避けたり、スクリプトへのパス(相対または絶対は重要ではありません)を提供して、実際に確実に動作するよう-
にすることができます。
もう一度実用的な観点から見ると、私は既知のシェルのコードを書くことを好みますが、これが不可能な場合は、最終的にcase
関数の中に含まれる見苦しい文で終わることがあります。一般化を*csh
シェルまで拡張する必要がある場合を除いて、おそらく逃げるでしょう。