たとえば、私のスクリプトはです。同じ名前の実行可能ファイルを$HOME/bin/sudo
検索して実行したいのですが、スクリプト自体はそうでなければ無限ループに陥ります!$PATH
sudo
$HOME/bin/sudo
編集:要点は、場合によっては、代替スクリプトが通常のシステムコマンドよりも高い優先順位を持つことを望み、場合によってはその逆を望むことです。したがって、「$ HOME / bin」をパスの最初に設定したので、各コマンドの優先順位を個別に定義できるようになりました。私はまた、スクリプトが他のシステムで実行できるように、ある種の「移植性」を望んでいます。
ベストアンサー1
スクリプトや機能は必要ありません。$HOME/bin
パスに最後の項目を配置すると、次の場合にのみ機能します$PATH
。
例:
[jenny@sameen ~]$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin
[jenny@sameen ~]$ which foo
/usr/bin/which: no foo in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin)
[jenny@sameen ~]$ export PATH=$PATH:$HOME/bin
[jenny@sameen ~]$ which foo
~/bin/foo
[jenny@sameen ~]$ sudo cp bin/foo /usr/local/bin/
[jenny@sameen ~]$ which foo
/usr/local/bin/foo
独自の $PATH を設定してスクリプト内で確認したい場合は、次の例をご覧ください。
#!/bin/bash
export ORIGPATH=$PATH # to revert the path after checking for the binary
export PATH=`echo $PATH |sed -e 's{/home/jenny/bin:{{'`
MYNAME=`basename $0`
if which $MYNAME
then
BINFILE=`which $MYNAME`
export PATH=$ORIGPATH
echo "Found $MYNAME in $BINFILE "
$BINFILE
else
export PATH=$ORIGPATH
echo "Here goes the rest of the script"
fi