echo, printf在脚本中作为命令运行时不起作用



我在WSL2中测试了脚本
这是我的脚本:

#!/usr/bin/bash
echo "testing..."
printf "testing..."

如果我运行
bash test
source test
. test

但是,如果我将脚本所在的路径添加到path并运行
test

,则不会输出任何内容。为什么?我该如何修复它?

test是bash内置的。POSIX系统也有test可执行文件。

当您输入一个命令而没有指定可执行文件的路径时,bash将首先检查该命令是否是其内置命令之一,然后在PATH中搜索可执行文件。如果该命令与一个bash内置命令的名称匹配,它将运行内置的。

如果您仍然希望在不指定路径的情况下运行脚本,有两种方法:推荐

  1. :重命名文件,然后使用新名称运行它(脚本文件需要设置可执行权限位)。
  2. 确保你的脚本有它的文件权限设置,这样它是可执行的,确保你的PATH设置,这样你的test会在系统的test之前被发现,然后运行env test来运行你的脚本。env将搜索你的PATH来找到你的test可执行文件,然后执行它。

最后,不建议使用选项2,因为重新排序PATH可能很危险,而且(对您和其他人来说)在您的系统上有第二个test二进制文件可能会令人困惑。