如何从文件中的列表运行第一个进程,删除第一行,就好像该文件是一个队列并且我调用“pop”一样?

sec*_*ecr 3 unix queue shell

如何从存储在文件中的进程列表中运行第一个进程并立即删除第一行,就好像该文件是一个队列并且我调用了“pop”一样?

我想以类似流行的方式调用简单文本文件中列出的第一个命令,并使用 \n 作为分隔符:

图1:

cmdqueue.lst :

proc_C1
proc_C2
proc_C3
.
.
Run Code Online (Sandbox Code Playgroud)

图2:

通过以下方式弹出第一个命令popcmd

proc_A | proc_B | popcmd cmdqueue.lst | proc_D
Run Code Online (Sandbox Code Playgroud)

图3:

cmdqueue.lst :

proc_C2
proc_C3
proc_C4
.
.
Run Code Online (Sandbox Code Playgroud)

Cha*_*tin 5

噢,这是一句有趣的台词。

好吧,事情就是这样。您想要的是一个程序,在调用时将文件的第一行打印到标准输出,然后从文件中删除该行。听起来像是sed(1)的工作。

尝试

proc_A | proc_B | `(head -1 cmdstack.lst; sed -i -e '1d' cmdstack.lst)` | proc_D
Run Code Online (Sandbox Code Playgroud)

我确信已经喝过咖啡的人可以将 sed 程序更改为不需要head(1)调用,但这可行,并显示使用子 shell(“( foo )”在子进程中运行。 )