我有一台带有 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
标志会忽略该文件并避免错误