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