口数の多い sudo を静かに背景実行する alias

まず結論だけ

こんな alias を ~/.bashrc に書くと便利👍

alias my_alias='sudo -b my_command > /dev/null'

もし標準エラー出力も出したくない場合は、> /dev/null のあとに半角スペースを空けて 2>&1 を追記する。

想定している状況

ある長いコマンドの alias を作りたい。そのプログラムは sudo での実行が必要。停止するまで動き続けるので、バックグラウンドで実行したい。起動中の verbose な標準出力は捨てたい。これらのニーズに応えるのが、最初に書いた alias 設定。簡単に補足すると、

  • 止めるまで止まらないのは、例えばオプション無しの $ ping example.com みたいなやつ
  • 出力が出続けるのは、これまた例えば $ ping example.com がそうだね

バックグラウンド実行の方法として、単純にはコマンド末尾に & を付ける方法がある。しかし、これをそのまま alias my_alias='sudo my_command &' のように alias を設定しても上手く行かない。入力が変な場所で改行されるせいで、sudo パスワードを入力できなくなってしまう。下の画像は、その例。

パスワードを入力できない

コマンドを背景実行させ、かつ sudo にパスワードを渡せる alias を書くには、sudo-b オプションを使う。これを使ったコマンドを alias として設定すると、呼び出した際にパスワードをきちんと入力できる。つまり、alias my_alias='sudo -b my_command' みたいな感じ。

alias に登録したコマンドが、正しくパスワードを要求してる

最後に、標準出力を捨てるために > /dev/null を追記して、冒頭に載せた alias 設定が完成する。これを設定しないと、背景実行のコマンドであっても標準出力が端末に飛び出してきて (用途によっては) 邪魔になるのでね。

コメントを残す

回れ右の内輪差をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む