带有多个命令的终端 -e

带有多个命令的终端 -e

我有一台带有 Openbox 的 Arch Linux 机器,我想在我的自动启动脚本 (bash) 上运行更新 - 所以我将以下命令添加到我的自动启动中:(rxvt -e sudo pacman -Syu &即打开rxvt终端并运行 Archlinux 包管理器的标准更新命令,pacman) 。

然而,有时数据库被另一个pacman进程锁定,然后命令失败,只是关闭rxvt而不执行任何操作 - 所以我想首先通过使用来删除锁rxvt -e sudo rm /var/lib/pacman/db.lck && sudo pacman -Syu &(删除 pacman 上的锁,然后更新)。这不起作用,因为实际上只有第一个命令在实例中执行rxvt

有什么方法可以让它正确(在用标志打开的终端上运行两个命令-e)?我知道我可以打开两个单独的终端,每个终端执行一个命令,但在我看来这真的很混乱。或者,如果有另一种更简单的方法来确保锁不存在,我也可以(尽管我更喜欢在同一个终端上使用它,这样我可以清楚地看到输出rm

答案1

使用引号使其成为单个命令:

rxvt -e  "sudo rm /var/lib/pacman/db.lck && sudo pacman -Syu" &

某些终端需要将其包装在 shell 命令中,例如,

rxvt -e sh -c "sudo rm -f /var/lib/pacman/db.lck && sudo pacman -Syu" &

如果文件不存在,该-f标志会忽略该文件并避免错误

相关内容