私は「コマンド」を引数として使用し、その周りにいくつかの便利なラッパーを追加するプログラムを作業しています。おそらく、助けを与えるためにコマンドが「存在する」ことを確認するようです。私が知る限り、この検査はwhich
。私のbashシェルにはset
同じコマンドがexport
組み込まれているので、which
何も返されません。
シェル組み込みコマンドを使用せずに環境変数を設定する方法はありますか?
set.sh
私の考えは正義と同じことをすることです
#! /bin/bash
export $1
しかし、これはクレイジーだと思います。
答え1
できません。シェルだけが独自の環境を変更できますset
。export
〜しなければならない常に内蔵されています。
cd
などはalias
同じです。
私が提案できる最善の方法は、シェル関数を使用してラッパーを再実装することです。または「取得する」シェルスクリプトです。どちらにしても実行されるラッパーは~へシェルはこれらの操作をよりスムーズに実行できます。
答え2
元の問題に対する考えられる解決策は、ラッパーにラッパーを提供することです(Xzibitイメージを除く)。
#!/bin/bash
command="$1"
temp=$(mktemp -d)
> "$temp/$command"
chmod a+x "$temp/$command"
PATH+=:$temp
your_wrapper
rm -r "$temp"
これにより、コマンドをオーバーライドせずにラッパーのテストに合格する空の実行可能ファイルが生成されます。実際に実行したいです(内蔵)。