【问题标题】:echo, printf not work in script when run it as command [closed]echo,printf 在作为命令运行时在脚本中不起作用[关闭]
【发布时间】:2021-03-06 06:48:00
【问题描述】:

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

#!/usr/bin/bash

echo "testing..."
printf "testing..."

如果我像这样运行,它工作正常
bash test
source test
. test

但如果我将脚本所在的路径添加到 PATH 并运行,它什么也不会输出
test

为什么以及如何解决?

【问题讨论】:

  • test 是标准实用程序(也称为[
  • 显示type test的输出。
  • 大声笑,谢谢回答。我修改它的文件名后它就可以工作了。

标签: bash shell windows-subsystem-for-linux


【解决方案1】:

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

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

如果您仍想在不指定路径的情况下运行脚本,有两种方法可以做到:

  1. 推荐:重命名您的文件,然后使用新名称运行它(您的脚本文件需要设置其可执行权限位)。
  2. 确保您的脚本设置了文件权限,使其可执行,确保您的PATH 设置为您的test 将在系统的test 之前找到,然后运行env test 以运行你的脚本。 env 将搜索您的 PATH 以找到您的 test 可执行文件,然后它将执行它。

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

【讨论】:

  • 我不会说“bash 实用程序”——/usr/bin/test 存在,即使您根本没有安装 bash; bash 提供内置等效项是一种性能优化,但如果不提供,行为将是相同的。
猜你喜欢
  • 2021-02-22
  • 2014-11-19
  • 2011-05-08
  • 2021-10-23
  • 1970-01-01
  • 2013-04-30
  • 2014-04-01
  • 2015-10-12
  • 1970-01-01
相关资源
最近更新 更多