据我所知,使用以下命令
在bash中完成一个接一个的命令command1 && command2
或
command1; command2
甚至
command1 & command2
我也理解存储在bash变量中的命令可以通过简单地将变量触发为:
来运行TestCommand="ls"
$TestCommand
执行上述操作将列出目录中的所有文件,并且我已对其进行了测试。
但是对多个命令执行相同操作会产生错误。以下示例:
TestCommand="ls && ls -l"
$TestCommand
ls: cannot access &&: No such file or directory
ls: cannot access ls: No such file or directory
我的问题是为什么会发生这种情况,是否有解决方法?
在你抨击我做一些如此愚蠢的事情之前。前面只是提出问题。我有一个目录中的文件列表,我使用sed将列表转换为单个可执行字符串。将该字符串存储在bash变量中,我试图运行它但失败了。
答案 0 :(得分:1)
当您将两个命令放在单个字符串变量中时,它将作为单个命令执行。因此,当您使用“$ TestCommand”执行两个“ls”命令时,它只执行一个(第一个)“ls”命令。它将&& 和 ls (第二个)视为第一个 ls 命令的参数。
由于您当前的工作目录中没有任何名为&&的文件并且它返回错误:
ls: cannot access &&: No such file or directory
ls: cannot access ls: No such file or directory
所以,基本上你的命令就像这样
ls file1 file2 -l
如果file1和file2存在,它会给你这样的输出:
HuntM@~/scripts$ ls file1 file2 -l
-rw-r--r-- 1 girishp staff 0 Dec 8 12:44 file1
-rw-r--r-- 1 girishp staff 0 Dec 8 12:44 file2
现在你的解决方案:
您可以创建函数或另外一个脚本来执行以下命令:
caller.sh
#!/bin/bash
myLs=`./myls.sh`
echo "$myLs"
myls.sh
#!/bin/bash
ls && ls -l