shell中相同命令的结果不同

时间:2013-12-04 21:41:47

标签: linux bash

for file in `ls nmm-*.txt`; do 
    awk -v fn="${file}" 'function abs(x){return ((x<0.0)?-x:x)} {if(NR>1 &&(abs($1)>4096 || abs($2)>4096)) print fn" "NR;}' ${file}
done

当我在shell中运行此命令时,我收到错误:

awk: cmd. line:1: fatal: cannot open file `nmm-990000.txt' for reading (No such file or directory)

但是如果我将相同的命令放在像ttt和

这样的文件中
chmod +x ddd ; ./ddd

它有效。

这是一个类似的问题:

ls nmm-*.txt | sort -k1.4n

如果我在shell中运行它,此命令将不会给出正确的结果。但如果我在shell脚本中使用它,它的工作原理。我正在使用bash。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

作为zb&#39;怀疑,故障是由于ls的别名(仅在交互式外壳中展开)而带有选项--color;当使用该输出时,颜色控制代码被包裹在文件名周围,并且这个联合体既不能用作文件名,也不能像人们期望的那样打开或排序。

根据建议,使用for fname in nmm-*.txt而不调用ls,也可以使用/bin/ls nmm-*.txt | …(这样,不会扩展任何别名)可以避免这种情况。您也可以考虑删除alias ls=…