LINUX sh脚本队列

LINUX sh脚本队列,linux,bash,Linux,Bash,我在一个项目上工作,我需要用avconv将视频转换成不同的格式。问题是我不希望它们在后台同时运行。所以我想让*.txt文件和SH脚本检查第一行(它将是脚本),同时“运行”这一行并删除它,完成后将再次运行第一行并删除它 我怎么可能那样做呢?抱歉,如果这么简单,因为我以前从未在Linux SH脚本中使用过文件读取。回答关键问题-您可以使用tail命令(也可以使用head命令)。另一个问题是你们想要完成的整个任务,我认为这比仅仅切断第一条线要复杂得多,但祝你们好运 要“编辑”-过滤掉第一行: tail

我在一个项目上工作,我需要用avconv将视频转换成不同的格式。问题是我不希望它们在后台同时运行。所以我想让*.txt文件和SH脚本检查第一行(它将是脚本),同时“运行”这一行并删除它,完成后将再次运行第一行并删除它


我怎么可能那样做呢?抱歉,如果这么简单,因为我以前从未在Linux SH脚本中使用过文件读取。

回答关键问题-您可以使用
tail
命令(也可以使用
head
命令)。另一个问题是你们想要完成的整个任务,我认为这比仅仅切断第一条线要复杂得多,但祝你们好运

要“编辑”-过滤掉第一行:

tail -n +2 input_file.txt > output_file.txt
然后可以将输出文件移到输入文件上(
mv output\u file.txt input\u file.txt

类似地,您可以通过以下方式从文本文件中获取第一行:

head -n 1 input_file.txt

如果您只想对文件的每一行执行某些操作,则可以像这样轻松地执行:

while read line; do
  echo $line
done < file.txt
while read line; do
  theprogram $line
done < file.txt
#!/bin/bash
avconv <abc> <def>
avconv <ghi> <jkl>
avconv ...
这将使用该行作为程序的参数为每行运行程序


请注意,通过使用此方法,不会修改
文件.txt
(不会从文件中提取行)。这可能是您想要的,也可能不是您想要的。

如果您只想一个接一个地运行大量的
avconv
作业,请将它们放在shell脚本中,并按如下方式运行:

while read line; do
  echo $line
done < file.txt
while read line; do
  theprogram $line
done < file.txt
#!/bin/bash
avconv <abc> <def>
avconv <ghi> <jkl>
avconv ...
然后,当您有一个新作业时,
echo
将其发送到队列的末尾,如下所示

echo avconv param1 param2 >> jobqueue
键入以查看手册页中的相关部分

man parallel
/jobqueue <Enter>
人并行
/工作队列

我相信举个例子会对你的问题有所帮助,因为英语不是很清楚。另外,如果您不太熟悉shell,那么它可能不是解决您的问题的好语言。您知道其他编程语言吗?请参阅:如果数字不太长,您可以始终在子shell中按顺序运行它们,并在子shell中添加背景。e、 g.
$(avconv file1.avi;avconv file2.avi;avconv file3.avi)和
。您还可以创建复合语句:
$(avconv file1.avi&&avconv file2.avi&&avconv file3.avi)&