当 运行 作为命令时,echo、printf 在脚本中不起作用
echo, printf not work in script when run it as command
我在 WSL2 中测试脚本
这是我的脚本:
#!/usr/bin/bash
echo "testing..."
printf "testing..."
如果我运行喜欢
,它会很好用
bash test
source test
. test
但是如果我将脚本所在的路径添加到 PATH 并且 运行
它什么都不输出
test
为什么以及如何解决?
test
是一个 bash 内置。 POSIX 系统还将有一个 test
可执行文件。
当您输入命令但未指定可执行文件的路径时,bash 将首先检查该命令是否是其内置命令之一,然后再在 PATH
中搜索可执行文件。如果该命令与 bash 内置函数之一的名称匹配,它将 运行 内置函数。
如果您仍想运行您的脚本而不指定其路径,有两种方法可以做到:
- 建议: 重命名您的文件,然后 运行 使用新名称(您的脚本文件需要设置其可执行权限位)。
- 确保您的脚本设置了文件权限以使其可执行,确保您的
PATH
已设置以便您的 test
将在系统的 test
之前被发现,然后 运行 env test
到 运行 你的脚本。 env
将搜索您的 PATH
以找到您的 test
可执行文件,然后执行它。
最终,不推荐选项 2,因为重新排序您的 PATH
可能很脆弱,并且(对于您和其他人)可能会混淆第二个 test
二进制文件你的系统。
我在 WSL2 中测试脚本
这是我的脚本:
#!/usr/bin/bash
echo "testing..."
printf "testing..."
如果我运行喜欢
,它会很好用
bash test
source test
. test
但是如果我将脚本所在的路径添加到 PATH 并且 运行
它什么都不输出
test
为什么以及如何解决?
test
是一个 bash 内置。 POSIX 系统还将有一个 test
可执行文件。
当您输入命令但未指定可执行文件的路径时,bash 将首先检查该命令是否是其内置命令之一,然后再在 PATH
中搜索可执行文件。如果该命令与 bash 内置函数之一的名称匹配,它将 运行 内置函数。
如果您仍想运行您的脚本而不指定其路径,有两种方法可以做到:
- 建议: 重命名您的文件,然后 运行 使用新名称(您的脚本文件需要设置其可执行权限位)。
- 确保您的脚本设置了文件权限以使其可执行,确保您的
PATH
已设置以便您的test
将在系统的test
之前被发现,然后 运行env test
到 运行 你的脚本。env
将搜索您的PATH
以找到您的test
可执行文件,然后执行它。
最终,不推荐选项 2,因为重新排序您的 PATH
可能很脆弱,并且(对于您和其他人)可能会混淆第二个 test
二进制文件你的系统。