ソース `.filename`を取得する方法は信頼できますか?

ソース `.filename`を取得する方法は信頼できますか?

現在、POSIX仕様は.組み込みドットのオプションを指定しません。

私が次のことをするなら:

$ echo 'echo .' > /tmp/-foo
$ PATH=/tmp "$shell" -c '. -foo'

これにより、他のシェルの結果が異なります。

  • dash, ash, ksh88, Bourne shell, schily sh, schily osh, heirloom sh がうまく動作します。
  • bash、、、、、、、いいえ。yash​​​これらのシェルで実行されるようにコマンドを変更します。ksh93pdkshmkshposh. -- -foo

しかも使用する--のは非互換的な方法なのでPOSIX仕様によると組み込み型は以下に従わない。ユーティリティ構文ガイド無視されます--

zshどちらの場合でも動作する唯一のシェルです。

. filenameそれでは、BourneやPOSIXなどのシェルでこれを確実に動作させるにはどうすればよいですか?

答え1

シェル関連の効果を避けるためにフルパスを.. /absolute/path/to/script. relative/path/to/script

とにかく、パスルックアップはソーススクリプトにはほとんど役に立ちません。 PATH検索が必要な場合は、ファイル名がで始まる場合は手動で検索できます。あるいは、単純にするために-ファイル名がで始まらないようにすることもできます。-

答え2

私はこれが部分的に理論的な質問だと思います。

埋め込みスクリプトの最初の文字になるのを避けたり、スクリプトへのパス(相対または絶対は重要ではありません)を提供して、実際に確実に動作するよう-にすることができます。

もう一度実用的な観点から見ると、私は既知のシェルのコードを書くことを好みますが、これが不可能な場合は、最終的にcase関数の中に含まれる見苦しい文で終わることがあります。一般化を*cshシェルまで拡張する必要がある場合を除いて、おそらく逃げるでしょう。

関連情報