连续运行多个命令

2023-12-22 14:37:38

;

如果需要连续运行多个命令,但是其中一些命令运行的时间比较长,而你不想长时间地守候在计算机旁,这个时候应该怎么办呢?例如,如果一个zip压缩文件中有很多John Coltrane的MP3文件,你想先解压缩,再把它们放到一个新子目录中,最后再删除原来的压缩文件,该怎么做呢?通常你只能一次运行一个命令,如下所示:

说明 为了节省篇幅,此处删除了完整列表中的所有者和组信息。

$ ls -l /home/scott/music
-rw-r--r-- 1437931 2005-11-07 17:19 JohnColtrane.zip
$ unzip /home/scott/music/JohnColtrane.zip
$ mkdir -p /home/scott/music/coltrane
$ mv /home/scott/music/JohnColtrane*.mp3
?/home/scott/music/coltrane/
$ rm /home/scott/music/JohnColtrane.zip

JohnColtrane.zip的文件大小为1.4 GB,即使是速度很快的计算机,解压这么个庞然大物也要花不少时间,而且除了坐在那里干等,你或许有更重要的事情去做。命令栈(command stacking)可以解决这一问题。

命令栈是将所有需要运行的命令放到shell的一行上,再用分号(;)隔开每个具体的命令。接着依次顺序执行每个命令,只有一个命令结束运行(无论成功或失败),才会运行下一个命令。这样的用法很容易,也确实能够节省你的时间。

用命令栈的方式,前面的一系列命令可以写成:

$ ls -l /home/scott/music
-rw-r--r-- 1437931 2005-11-07 17:19 JohnColtrane.zip
$ unzip /home/scott/music/JohnColtrane.zip ;
?mkdir -p /home/scott/music/coltrane ;
?mv /home/scott/music/JohnColtrane*.mp3
?/home/scott/music/coltrane/ ;
?rm /home/scott/music/JohnColtrane.zip

当然,在命令运行的时候,也可以使用这个办法来引入短暂的延迟。如果你想截取显示器中所有可见内容的截图,只需要运行以下命令(假设你的计算机中已经安装了ImageMagick包,几乎所有的Linux分发版中都有这个包):

$ sleep 3 ; import -frame window.tif

这个例子中的sleep命令会等待3秒钟,然后使用import命令截取屏幕截图。有几秒钟的延迟,你就有时间最小化终端控制台应用程序,把你想让截图中出现的任何窗口调到前面来。分号(;)便于从逻辑上分隔各个命令,这样你就能最大程度地使用这些命令。

警告 使用命令栈要十分谨慎,特别是删除或者移动文件的时候。确保你输入的确实是你想要运行的命令,因为这些命令是依次顺序运行的,否则可能会得到意想不到的结果。

文章来源:https://blog.csdn.net/zhao_god/article/details/135151345
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。