2013-11-02 111 views
0
for i in {1...50000}; 
do 
    $(sudo lsof -Pni | cut -f 1 -d ' ' > fd_history/$(date +"%H-%M-%S")); 
done 

它应该将输出的lsof输入一个以当前时间戳命名的文件(每个lsof输出行只有第一个记号)。由于打开了大量文件,每个lsof都需要几秒钟才能运行。为什么这个bash for循环只迭代一次?

循环在第一次迭代后退出,而不是连续运行lsof。为什么? (我正在将这条线直接输入到我的控制台。)

+3

两点。 '{1..50000}' – Kevin

+1

令人难以置信的是,它修复了它。 –

+2

你可能不想'$(...)'符号;它在里面执行命令,捕获输出,然后尝试在输出中运行命令。幸运的是,你已经将标准输出发送到一个文件,所以不会有任何东西需要执行,但是删除记号可以节省一些时间(几乎不可测量,但是...)。 –

回答

3

您有一个额外的点有:{1...50000}应该是{1..50000};第一个没有以任何方式展开。

1

使用seq

for i in $(seq 50000); 
do 
    $(sudo lsof -Pni | cut -f 1 -d ' ' > fd_history/$(date +"%H-%M-%S")); 
done 

或者

for i in {1..50000}; 
do 
    $(sudo lsof -Pni | cut -f 1 -d ' ' > fd_history/$(date +"%H-%M-%S")); 
done