Openboxを搭載したArch Linuxシステムがあり、自動起動スクリプト(bash)でアップデートを実行したかったです。そのため、自動起動に次のコマンドを追加しました。 (rxvt -e sudo pacman -Syu &
つまり、ターミナルを開き、rxvt
Archlinuxパッケージマネージャ標準アップデートコマンドを実行しますpacman
。)
ただし、データベースがpacman
他のプロセスによってロックされ、コマンドが失敗し、何もせずにrxvt
閉じられることがあります。したがって、まずpacmanを使用してロックを削除したいrxvt -e sudo rm /var/lib/pacman/db.lck && sudo pacman -Syu &
(pacmanからロックを削除してから更新)。最初のコマンドだけがインスタンスで実際に実行されるため、これは機能しませんrxvt
。
正しい方法はありますか(flagsで開いた端末で両方のコマンドを実行します-e
)?私は2つの別々の端末を開き、それぞれ1つのコマンドを実行できることを知っていますが、それは私にとって本当に混乱しているようです。あるいは、ロックが存在しないことを確認する別のより簡単な方法がある場合は、そうすることもできます(出力を明確に見るために同じ端末で使用することをお勧めしますrm
)。
答え1
単一のコマンドで作成するには、引用符を使用してください。
rxvt -e "sudo rm /var/lib/pacman/db.lck && sudo pacman -Syu" &
一部の端末では、これをシェルコマンドでラップする必要があります。たとえば、次のようになります。
rxvt -e sh -c "sudo rm -f /var/lib/pacman/db.lck && sudo pacman -Syu" &
ファイルが存在しない場合、この-f
フラグはファイルを無視してエラーを防ぎます。