【发布时间】:2012-08-23 06:07:02
【问题描述】:
我想在循环从命令中读取行的循环中创建 bash 别名。为了逐行读取输出,我相信我需要将输出通过管道传输到read。但是,当我这样做时,别名不存在。
如果我在.bashrc 中包含以下内容:
for x in a1 a2; do
eval "alias $x='echo foo'"
done
echo -e "a3\na4" | while read x; do
eval "alias $x='echo foo'"
done
别名 a1 和 a2 存在,但 a3 和 a4 不存在。这两个循环有什么区别?
【问题讨论】:
-
这是在管道到
while循环时非常常见的问题。有关详细信息和各种替代解决方案,请参阅 this answer 或 BashFAQ/024。 -
另外,这里没有必要使用
eval。alias $x='echo foo'将在定义别名之前扩展$x。