所以我有一个希望从命令行运行的函数。
cat foo.sh
#!/bin/bash
echo foobar
我将其导出到我的 PATH 变量并更改为不同的目录。
export PATH=${PATH}:/home/usr/scripts/foo.sh
mkdir test && cd test
sh foo.sh
sh: foo.sh: No such file or directory
如果我像这样运行它,foo.sh
我就会得到bash: foo.sh: command not found
。
我可以使用绝对路径运行它,但我认为如果将它添加到我的 $PATH 中,我就不需要这样做。我在这里犯了什么错误?
谢谢。
答案1
这里有几个问题。$PATH
由冒号分隔的目录组成,而不是文件。您不应该将脚本声明为bash
脚本,然后用来sh
运行它。一般来说,您要像标准实用程序一样调用的文件没有扩展名。 (无论如何,在许多情况下扩展都是可选的。)
# Create a directory
mkdir -p "$HOME/bin"
# Create a script in that directory
cat <<'EOF' >"$HOME/bin/myscript" # Don't use "test" :-O
#!/bin/bash
echo This is myscript
EOF
# Make it executable
chmod a+x "$HOME/bin/myscript"
# Add the directory to the PATH
export PATH="$PATH:$HOME/bin"
# Now run the script as if it's a normal command
myscript
避免使用名为 的脚本的警告test
是该脚本/bin/test
已作为有效命令存在。此外,在许多 shell 中test
都有一个内置脚本,它将覆盖您自己的脚本,无论$PATH
.