【问题标题】:Command running in terminal does not work in shell script在终端中运行的命令在 shell 脚本中不起作用
【发布时间】:2017-09-24 19:07:07
【问题描述】:

我正在尝试使用包含以下命令的 shell 脚本:

(./rstrings $INPUT ; cat $INPUT ) | sha1sum

当我在终端中运行上述命令时,我得到了所需的输出,而在我的 shell 脚本中,相同的命令给了我未找到的命令。以下是脚本中创建问题的行:

sha1 = `(./rstrings $INPUT ; cat $INPUT ) | sha1sum`

rstrings 是一个 c 可执行文件...

我是 shell 脚本的新手,如有任何帮助,我们将不胜感激!

【问题讨论】:

  • 您使用的是相对路径,执行该行时您可能不在正确的目录中。
  • 我在与 shell 脚本和 c 可执行文件相同的目录中运行命令...
  • 谢谢 Cyrus,shellcheck.net 帮助我找到了我的错误...我在分配过程中使用了额外的空格...来自主流编程语言让我错过了这个

标签: linux bash shell syntax-error sh


【解决方案1】:

我弄错了,我应该在作业中保留空格。

sha1 = `(./rstrings $INPUT ; cat $INPUT ) | sha1sum`

以下声明反映了所需的更改:

sha1=`(./rstrings $INPUT ; cat $INPUT ) | sha1sum`

对于所有其他新的 shell 脚本程序,分配时不允许使用空格。 http://www.shellcheck.net/ 对遵循 shell 脚本的最佳实践非常有帮助,我感谢 Cyrus 指导我。

【讨论】:

  • 正确。另一方面,在测试表达式中,空格是必需的(例如,如果[ "$x" = "$y" ] 可以工作,但if [ "$x"="$y" ] 不会达到您的预期,而if ["$x" = "$y"] 则根本不会工作)。空格是 shell 语法中重要的分隔符,因此不要添加或删除它们,除非它位于(少数)不会改变含义的特定位置之一。是的,shellcheck.net 是你的朋友。
猜你喜欢
  • 2016-09-15
  • 2021-10-23
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2021-09-25
  • 1970-01-01
相关资源
最近更新 更多