Bash是否存在版本问题,会阻止我执行文件?
我创建了一个bashshell脚本文件,可以在本地bash(版本4.2.10)上运行,但不能在远程计算机(版本3.2)上运行。这就是我要做的Bash是否存在版本问题,会阻止我执行文件?,bash,Bash,我创建了一个bashshell脚本文件,可以在本地bash(版本4.2.10)上运行,但不能在远程计算机(版本3.2)上运行。这就是我要做的 本地文件夹中存在脚本文件(some_script.sh) 我已经做了$chmod755一些_script.sh,使它成为一个可执行文件 现在,我试试$。\u script.sh 在我的电脑上,这个运行正常。在远程计算机上,这将返回一个“未找到命令”错误: /some\u script.sh:未找到命令。 此外,在远程版本中,可执行文件的名称后面有星号(
- 本地文件夹中存在脚本文件(some_script.sh)
- 我已经做了
,使它成为一个可执行文件$chmod755一些_script.sh
- 现在,我试试
$。\u script.sh
/some\u script.sh:未找到命令。
此外,在远程版本中,可执行文件的名称后面有星号(*)。我不知道这是否有什么不同,但当我包括星星时,我仍然会得到相同的错误
这是因为bashshell版本吗?有什么办法让它工作吗
谢谢 未找到
命令
消息可能有点误导。讨论中的“命令”可以是您试图执行的脚本,也可以是shebang行中指定的shell
例如,在我的系统上:
% cat foo.sh
#!/no/such/dir/sh
echo hello
% ./foo.sh
./foo.sh: Command not found.
/foo.sh
明显存在;不存在的是解释器/no/so/dir/sh
。(我发现错误消息因调用foo.sh
的shell而异)
因此,几乎可以肯定的是,您在some_script.sh
的第一行指定了错误的解释器名称。可能bash
安装在不同的位置(通常是/bin/bash
,但并不总是如此)
至于可执行文件名中的*
字符,它们实际上不是文件名的一部分。ls
命令的-F
选项使其在某些类型的文件后显示特殊字符:*
用于可执行文件,/
用于目录,@
用于符号链接,等等。可能在远程系统上,您的ls
别名为ls-F
或类似名称。如果您键入/bin/ls
,绕过别名,您应该会看到没有附加*
字符的文件名;如果键入/bin/ls-F
,则应再次看到*
s
在命令名中添加一个*
字符并不能完成您认为它正在做的事情,但可能不会有任何区别。例如,如果您键入
./some_script.sh*
*
是一个通配符,命令名扩展为当前目录中名称与模式匹配的所有文件的列表(这与*
在ls-F
输出中作为可执行文件的含义完全不同)。可能只有一个这样的文件,所以
/some\u script.sh*
可能等同于/some\u script.sh
。但不要键入*
;这是不必要的,可能会导致意外结果。未找到命令消息可能有点误导。讨论中的“命令”可以是您试图执行的脚本,也可以是shebang行中指定的shell
例如,在我的系统上:
% cat foo.sh
#!/no/such/dir/sh
echo hello
% ./foo.sh
./foo.sh: Command not found.
/foo.sh
明显存在;不存在的是解释器/no/so/dir/sh
。(我发现错误消息因调用foo.sh
的shell而异)
因此,几乎可以肯定的是,您在some_script.sh
的第一行指定了错误的解释器名称。可能bash
安装在不同的位置(通常是/bin/bash
,但并不总是如此)
至于可执行文件名中的*
字符,它们实际上不是文件名的一部分。ls
命令的-F
选项使其在某些类型的文件后显示特殊字符:*
用于可执行文件,/
用于目录,@
用于符号链接,等等。可能在远程系统上,您的ls
别名为ls-F
或类似名称。如果您键入/bin/ls
,绕过别名,您应该会看到没有附加*
字符的文件名;如果键入/bin/ls-F
,则应再次看到*
s
在命令名中添加一个*
字符并不能完成您认为它正在做的事情,但可能不会有任何区别。例如,如果您键入
./some_script.sh*
*
是一个通配符,命令名扩展为当前目录中名称与模式匹配的所有文件的列表(这与*
在ls-F
输出中作为可执行文件的含义完全不同)。可能只有一个这样的文件,所以
/some\u script.sh*
可能等同于/some\u script.sh
。但不要键入*
;这是不必要的,可能会导致意外的结果。检查脚本顶部的行。此处指示的bash
位置是否与另一个系统上的位置相同?健全性检查,您试图运行它的远程文件系统上的脚本是否正确?对于此错误,这应该无关紧要。因为它甚至不读取文件。但是,我确实把bash引用放错了地方…@Alex,是的,是的,谢谢:)我很困惑你是如何得到“Command not found”error的,但是如果你说远程系统上的文件名后面附加了星号(在一些shell中标记可执行文件),我假设您看到了试图在远程计算机上运行的脚本。您还可以再次检查脚本在远程系统上是否具有+x模式,以及脚本是否位于您正在ssh的用户的默认主目录中。请检查脚本顶部的行。此处指示的bash
位置是否与另一个系统上的位置相同?健全性检查,您试图运行它的远程文件系统上的脚本是否相同