为什么这个bash for循环只迭代一次?

时间:2013-11-02 02:36:08

标签: bash

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

它应该将lsof的输出传递到以当前时间戳命名的文件中(只有每个lsof输出行的第一个标记)。每个lsof需要几秒钟才能运行,因为有很多文件打开。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

使用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