Bre*_*don 11 command-line bash .desktop
我很好奇我将如何通过 shell 脚本运行多个命令。
例如,为了尝试一下,我希望能够将 .desktop 连接到将运行所有更新代码的 .sh,这样我就不必输入它了。我知道如何通过 .sh 执行单个命令,而不是多个。
反正?
Wil*_*ilf 13
真的很简单 - 您需要将命令分开。例如这个:
#!/bin/bash
sudo apt-get update
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
将更新包列表,然后是包。另一种可能性是这样(可能更好,因为 && 仅upgrade在update成功退出时才允许命令运行):
#!/bin/bash
sudo apt-get update && sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
这应该运行用于更新包列表的命令,然后是包本身。这需要保存到文本文件中(例如updatescript在主目录中)。然后,您可以通过运行使其可执行:
chmod +x ./updatescript
Run Code Online (Sandbox Code Playgroud)
或通过右键单击该文件并使其在其属性中可执行:

并在终端中运行它:
./updatescript
Run Code Online (Sandbox Code Playgroud)
笔记):
有一个选项 ( -y) 可以与upgrade命令一起使用,因此它在升级包之前不会提示。apt-get在升级包之前检查正在做什么是一个好主意,因为它可能/会做一些愚蠢的事情或你不希望它做的事情。可以通过运行找到有关此类选项的更多信息man apt-get。
这也意味着使用终端运行脚本更为理想,因为您可以检查它正在更新的内容,然后运行它。如果您想要一种 GUI 方式来运行更新,请使用软件中心,因为它就是它的用途。
只是为@Wilf 的出色答案添加几点,
如果出于任何原因,您可以并行运行命令,例如,autostartOpenBox的脚本可能如下所示:
#!/bin/bash
nitrogen --restore &
tint2 &
tilda
Run Code Online (Sandbox Code Playgroud)
这将使用 设置背景图像nitrogen,同时启动面板tint2并启动 Quake3 风格的下拉控制台tilda。如果您不需要在启动下一个程序之前完成某个程序,这将非常有用。不是这样的apt-get update和apt-get upgrade,但!
注意&每行末尾的标志。这将导致 shell 将该进程派生到后台并继续执行。请注意它与 的不同之处&&,它基本上是一个and标志,command_1 && command_2将执行command_1,如果它成功退出,则仅运行command_2,而command_1 & command_2将在第一个之后立即启动第二个。
此外,您可以只堆叠命令以让它们串行执行,如下所示:
#!/bin/bash
apt-get update
apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
这将运行apt-get upgrade后apt-get update的成品,但无论结果如何。因此,例如,即使更新因网络错误而退出,升级仍将运行。
您也可以在一行中使用;符号:apt-get update ; apt-get upgrade。同样,此解决方案对于这些特定命令不是最佳的,但在其他情况下可能会派上用场。
最后一点,您还可以断开包含以下内容的行&&:
command_1 &&
command_2
Run Code Online (Sandbox Code Playgroud)
这将与command_1 && command_2.