変数の評価を遅らせる方法(遅延評価)は何ですか?

変数の評価を遅らせる方法(遅延評価)は何ですか?

たとえば、0,1,2,...32767という名前の32768ディレクトリを作成しました。

コマンドを実行するたびにパスをランダムに選択したいと思います。

$PATHだからに変えたのですが、すぐに評価されるので$PATH:/blabla/$RANDOM動作ができませんでした。$RANDOM

評価をどのように遅らせることができますか?

ベストアンサー1

これは一般的なシェルの機能ではありません。

最新バージョンATTクッシュシェルには、規律関数と呼ばれる独自の機能があります。変数にアクセスするときにカスタムコードを実行できます。他の.sh.value値に設定されている場合は、変数値の代わりにその値を使用できます。

function PATH.get { .sh.value=$PATH:/blabla/$RANDOM; }

ただし、この機能は、変数がシェル内で使用されるのではPATHなく、スクリプトで変数が使用されたときにのみトリガーされるため、役に立ちません。PATH

最後のPATH要素をこのように作成してbashまたはzshを使用している場合は、「コマンドが見つかりません」機能を使用してコマンドが見つからないときにカスタムコードを呼び出すことができます。バッシュから:

command_not_found_handle () {
  command "/blabla/$RANDOM/$@"
}

zshから:

command_not_found_handler () {
  /blabla/$RANDOM/$1 "$@[2,$#]"
}

このような場合を除き、どのシェル機能も役に立ちません。いずれにせよ、シェルから呼び出されていないプログラムではシェル機能が役に立ちません。

使用できるLD_PRELOAD書くexeclpexecvpexecvpeライブラリ関数は、コロンで区切られた部分を分割し、PATH各部分をディレクトリとして解釈する代わりに、他の操作を実行できます。バラより 実行前のファイル記述子のリダイレクトたとえばLD_PRELOAD

または、PATHエントリを次の場所に配置できます。ヒューズファイルシステムは、指定されたパスが変更可能なデフォルトディレクトリに対応するようにスタックファイルシステムを実装します。これはexecve、各PATH要素の1つが機能するまで各PATH要素を呼び出すプログラムに対して機能しますが、最初に既存の実行可能ファイルを検索するPATHエントリを繰り返してから、見つかったファイルを実行するプログラムを混乱させます。

おすすめ記事