【问题标题】:Shell script runs when using the command: ./script, but not the command: script, where PATH=.:'usr/bin':etcShell 脚本在使用命令时运行:./script,而不是命令:脚本,其中 PATH=.:'usr/bin':etc
【发布时间】:2012-11-28 20:40:51
【问题描述】:

我正在运行 Zsh,当前目录在我的路径中,但是在没有 ./ 的情况下使用时脚本不会运行

阅读在我的终端中执行的这些语句以了解上下文(» 是我的 shell 提示符):

» ls
Makefile node_modules  package.json  README.md  src test  tst
» echo $PATH
.:[all_my_other_directories]
» cat test
echo "test";
nodeunit tst/
» ./test                                                                                                                                               
test
OK: 2 assertions (1ms)
» test
» which test
./test

请注意,which test 指向正确的位置,但 test 不运行它。

我知道将本地目录放在路径前面是个坏主意,但我已将路径更改为在末尾添加 .,但它并没有改变任何东西。

我将非常感谢任何帮助!

【问题讨论】:

  • 将当前目录(.,不是任何静态本地目录)或相对于当前目录放入$PATH 总是一个坏主意,无论您将它放在前面还是后面(尽管后者比较安全)。

标签: node.js shell zsh


【解决方案1】:

关键字test 是保留的,因为它实际上是一个内置的shell。更复杂的是,还有一个 shell command 也称为 test

改用其他名称 =)

【讨论】:

  • 啊,我明白了;我假设仅有的两个选项是/usr/bin/test(你提到的那个)和我目录中的一个。感谢您的信息!
【解决方案2】:

@sampson-chen 完全正确。一个补充:检查您将运行的确切内容

type test

,它会给你

test is a shell builtin

从而解决问题。不要使用which,它总是寻找命令。 type 等同于whence -v,因此您可以使用前者。

【讨论】:

  • 感谢您提供更多信息!我一定会使用type 来满足我的查找需求!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2022-08-17
  • 2012-01-06
  • 2023-01-09
  • 1970-01-01
相关资源
最近更新 更多