【发布时间】:2016-08-25 06:58:52
【问题描述】:
# while read a b ; do echo $a $b ; done < `for i in \`cat users.txt\` ; do PHPVER=\`selectorctl --user-current --user=$i\` ; echo $i $PHPVER ; done | awk '{print $1, $2}' | sed 's/native/5.3/g'`
-bash: `for i in \`cat users.txt\` ; do PHPVER=\`selectorctl --user-current --user=$i\` ; echo $i $PHPVER ; done | awk '{print $1, $2}' | sed 's/native/5.3/g'`: ambiguous redirect
如果去掉while read语句,输出:
# for i in `cat users.txt` ; do PHPVER=`selectorctl --user-current --user=$i` ; echo $i $PHPVER ; done | awk '{print $1, $2}' | sed 's/native/5.3/g'
user1 5.4
user2 5.4
user3 5.3
所以我需要获取这两列并将每一列转换为一个变量,这样我就可以在这样的命令中运行它们:
# selectorctl --set-user-current=$b --user=$a
但是,当我添加 while read 语句时,它会引发模棱两可的重定向
【问题讨论】:
-
首先,使用
$( . . . )代替反引号(` . . . `)。它使嵌套更容易 - 无需使用\`之类的东西 -
& 你的
< $(for ...)应该改为< <(for ...) -
如果
#提示意味着您以root 身份运行,那么这样做是个坏主意。以 root 身份进行实验是双重的坏主意。当你不打算这样做时,你可能会造成伤害。
标签: linux bash for-loop while-loop