Нет необходимости в скриптах или функциях. Если вы просто поставьте $ HOME / BIN
Последнее на вашем пути, он будет использоваться только в том случае, если в любом из предыдущих каталогов используется только соответствующее имя команды
.
Пример:
[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
Если вы не доверяете, чтобы вы могли установить свой собственный путь, чтобы вы все еще хотели сделать чек из скрипта, вот пример:
#!/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
Ошибка в этих строках (которые встречаются дважды):
if [ $1 -eq 1 ] ; then
echo
'
Одиночная кавычка должна быть на той же строке, что и echo
. Если она находится в следующей строке, то она рассматривается не как аргумент к echo
, а как следующая команда.