添加到 PATH 后无法从命令行运行文件

添加到 PATH 后无法从命令行运行文件

所以我有一个希望从命令行运行的函数。

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.

相关内容