【问题标题】:How can I write a command to shell script from a shell script without evaluating the command如何在不评估命令的情况下从 shell 脚本向 shell 脚本编写命令
【发布时间】:2017-06-02 19:08:07
【问题描述】:

我正在努力传递一个 shell 命令。具体来说,我编写了一个用户将运行的 shell 文件。在其中,根据用户输入编写了另一个 shell 文件。然后,此文件将传递给提交作业的命令。

现在在这个内部 shell 文件中,我有一个包含函数的变量。但是,当我运行用户 shell 脚本时,我无法让这个函数以内部 shell 文件可以使用它的方式传递。

我不能分享我的工作,但我会尝试做一个例子

#User shell script
cat >test.txt <<EOF
#a bunch of lines that are not relevant
var=`grep examples input.txt`
/bin/localfoo -${var}
EOF
# pass test.txt to localfoo2
/bin/localfoo2 /test.txt

当我运行“用户 Shell 脚本”时,它会打印 grep 找不到文件,但我不希望 grep 被评估。我需要按原样编写它,以便在读取“/bin/localfoo2 /test.txt”行时,评估 grep。

我已经尝试了很多方法。我试过双反勾号,我试过使用'echo $(eval $var)'。但是我通过谷歌搜索找到的方法都没有设法以能够完成我想要的方式传递这个 var。

非常感谢您的帮助。

【问题讨论】:

    标签: linux shell variables command


    【解决方案1】:

    您可以尝试使用单引号 (')。 您必须将单引号放在 grep 命令之前和 grep 命令末尾,如下所示。

    #User shell script
    cat >test.txt <<EOF
    #a bunch of lines that are not relevant
    var='`grep examples input.txt`'
    /bin/localfoo -${var}
    EOF
    # pass test.txt to localfoo2
    /bin/localfoo2 /test.txt
    

    我不明白您必须在哪里执行该 grep 命令。 如果你想在 localfoo 脚本中执行 grep 命令,希望这个方法对你有帮助。

    【讨论】:

    • 执行localfoo2时应该执行grep命令。它以 test.txt 作为输入。我尝试用单引号括起来,但 test.txt 只包含 var=''
    • 您只需像 var='grep examples input.txt' 一样删除反勾号。试试这个。
    • 但是它只是变成了一个普通的字符串不是吗?然后你需要一个 eval 来实际从 grep 获取值。
    • 我在另一个线程stackoverflow.com/questions/13122147/… 中找到了解决方案,看来像这样放置“EOF”就可以了。
    • 另一种方法是在反引号和$前加一个反斜杠,同时使用&lt;&lt; EOF。
    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2013-04-26
    • 2020-11-30
    相关资源
    最近更新 更多