命令在终端运行,则不会在shell脚本工作
问题描述:
我想用一个shell脚本包含以下命令:命令在终端运行,则不会在shell脚本工作
(./rstrings $INPUT ; cat $INPUT) | sha1sum
当我在终端运行上面的命令,我得到所需的输出,而在我的shell脚本中,相同的命令却没有找到我的命令。下面是在脚本创建问题行:
sha1 = `(./rstrings $INPUT ; cat $INPUT) | sha1sum`
rstrings是一个C executible ...
我新的shell脚本和任何帮助,将不胜感激!
答
我弄错了,我应该在作业中保留空格。
sha1 = `(./rstrings $INPUT ; cat $INPUT) | sha1sum`
下面的声明反映所需的变革:
sha1=`(./rstrings $INPUT ; cat $INPUT) | sha1sum`
对于所有其他新的shell脚本编写者,空间而分配是不允许的。 http://www.shellcheck.net/对于遵循shell脚本的最佳实践非常有帮助,我感谢Cyrus为我提供了指导。
+1
正确。另一方面,在测试表达式中需要*空格(例如,如果'[“$ x”=“$ y”]'会起作用,但是如果[“$ x”=“$ y”]'不会执行你期望什么,'如果[“$ x”=“$ y”]'根本不起作用)。空格是shell语法中的重要分隔符,因此不要添加或删除它们,除非它位于不改变含义的特定位置之一。是的,[shellcheck.net](http://www.shellcheck.net/)是你的朋友。 –
您正在使用相对路径,当该行被执行时,您可能不在正确的目录中。 –
我在与shell脚本和c可执行文件相同的目录中运行该命令... –
谢谢赛勒斯,shellcheck.net帮我找到了我的错误......我在分配期间使用了额外的空间......来自主流编程语言使我错过了这个 –