我正在写一个简单的脚本:
#!/bin/bash
PATH=$(readlink -f $0)
echo $PATH
DIR_PATH=$(dirname $PATH)
echo $DIR_PATH
然而,输出是:
/home/kalyani/Desktop/Linux/Proj/script.sh
./script.sh:line 6: dirname: command not found
我检查了所有其他可用的解决方案,并尝试了每一个,但都不起作用。我已经阅读了关于类似问题的其他线程,但它仍然不起作用。
可能是什么问题?
此外,如果我键入"which dirname",我会得到/usr/bin/dirname。
如果我回应$PATH,我得到:
/home/kalyani/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin/:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
由于/usr/bin在我的$PATH变量中,所以应该可以找到它,如果我在终端中键入它,就会找到它,但如果它在bash脚本中,那么它会给我带来麻烦。我能做什么?
一旦执行
PATH=$(readlink -f $0)
您的PATH现在是链接文件的名称,而不是目录,因此PATH中不再有任何。
请使用其他变量。如果您试图确保您的路径包括当前文件的位置,请使用
me="$(readlink -f ${BASH_SOURCE:-$0})"
PATH=$PATH:${me%/*}
如果你不使用bash,
me=`readlink -f "$0"`
PATH="$PATH:"`dirname $me`
或
PATH="$PATH:"`readlink -f "$0" | sed 's,/[^/]*$,,'`