在sudo之后循环遍历这里文件中的find命令的输出

时间:2013-03-08 07:20:09

标签: shell unix loops find

#!/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文档中的find命令输出?

2 个答案:

答案 0 :(得分:3)

因为$(...)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执行命令。

答案 1 :(得分:0)

流程替代&amp;变量扩展发生在heredocs处理之前。

尝试逃避$ signs&amp; glob(*)。