Bash:使用字符串变量运行一个接一个的命令

时间:2015-12-08 06:46:57

标签: linux bash

据我所知,使用以下命令

在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变量中,我试图运行它但失败了。

1 个答案:

答案 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