たとえば、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
書くexeclp
とexecvp
execvpe
ライブラリ関数は、コロンで区切られた部分を分割し、PATH
各部分をディレクトリとして解釈する代わりに、他の操作を実行できます。バラより
実行前のファイル記述子のリダイレクトたとえばLD_PRELOAD
。
または、PATHエントリを次の場所に配置できます。ヒューズファイルシステムは、指定されたパスが変更可能なデフォルトディレクトリに対応するようにスタックファイルシステムを実装します。これはexecve
、各PATH要素の1つが機能するまで各PATH要素を呼び出すプログラムに対して機能しますが、最初に既存の実行可能ファイルを検索するPATHエントリを繰り返してから、見つかったファイルを実行するプログラムを混乱させます。