【问题标题】:loop through output of find command in here documents after sudo在 sudo 之后在此处的文档中循环查找命令的输出
【发布时间】:2013-03-08 07:20:09
【问题描述】:
#!/bin/bash

sudo -u rei_sh -H -s <<-EOM

echo "hi"

for i in $(find -name *.properties)

do

echo "ivalue is \$i"

done

exit

EOM

我正在使用上面的代码。

当我运行代码时,只会打印“hi”。

但如果我使用“for i in one two”,则会打印以下内容

ivalue is one
ivalue is two.

为什么我不能在 here 文档中循环查找命令的输出?

【问题讨论】:

  • 请注意,&lt;&lt; 在这里的效果与&lt;&lt;- 一样好,因为人眼永远无法看到 HEREDOC。 (而且由于没有缩进,它们完全相同)。

标签: shell unix loops find


【解决方案1】:

因为$(...)sudo 启动之前运行...您需要引用EOM

sudo -u rei_sh -H -s <<-'EOM'
    echo "hi"
    for i in $(find -name *.properties)
    do
        echo "ivalue is $i"
    done
EOM

exit 是多余的。使用EOM 周围的引号,您也不需要在echo 命令中转义$。您也可以在$(...) 之前转义$,以防止sudo 之前的shell 执行命令。

【讨论】:

  • 嗨@Jonathan。我用'EOM'试过了。结果还是一样。只是“嗨”被打印出来了。请指教。在这里发布问题之前,我尝试在 $(...) 之前转义 $。这也没有用。
  • 哦,小提琴手! find 命令应该是固定的。 find . -name '*.properties' 或附近,但我认为您应该从中收到错误消息。
【解决方案2】:

进程替换和变量扩展发生在处理 heredocs 之前。

尝试转义 $ 符号和 glob (*)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2013-06-11
    • 2019-05-29
    相关资源
    最近更新 更多