bash
テキスト出力なしでバックグラウンドでプログラムを実行するには、次のようにします1>&- 2>&- &
。これにエイリアスを定義したいと思います。しかし、私が書くなら.bashrc
alias nooutput = '1>&- 2>&- &'
この文字列は、nooutput
シェルで実行したい実行可能ファイルの追加引数(ファイル名など)として解釈されます。また、オートコンプリート機能が機能しないようですnooutput
。noou
たとえば、[次へ]を押すとオートコンプリートにtabなりません。
この場合、エイリアスをどのように使用しますか?
GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
私はUbuntuUbuntu 20.04.3 LTS
とLinuxを使用していますが、解決策があればできるだけ一般的で、特定のバージョンやシステムアーキテクチャに縛られていないことを願ってい5.4.0-91-generic x86_64
ます。bash
答え1
まず、エイリアスを使用すると、単語として使用するときに単語の代わりに文字列を使用できます。最初の単語簡単なコマンド。コマンドの途中または終わりにないので、コマンドの最後にエイリアスを使用しようとしたとき。myCommand myAlias
、前述のように動作しません。なぜエイリアスはコマンドの最初の単語であるべきですか?myAlias myCommand
;
ただし、使用するバックグラウンド実行演算子は1>&- 2>&- &
コマンドの先頭には表示されないため(doではない)、エイリアスでは同様の操作を使用& myCommand
できません。&
2番目の問題は、エイリアス名とエイリアステキストの周囲にスペースを入れないようにすることです。
alias nooutput='1>&- 2>&- '
次のように実行します。
nooutput myCommand &
注:シェル関数は、ほとんどすべての目的でエイリアスよりも優先されます。
答え2
Bashは、最初の単語位置(または最初の単語が空白で終わる場合は別のエイリアスの後ろ)のエイリアスのみをサポートします。ただし、zshでは次のように設定できます。グローバルエイリアス、これはどの場所でも拡張されます。
zsh% alias -g nooutput='1>&- 2>&- &'
% (echo foo; sleep 12) nooutput
[1] 15058
...
少なくとも私のzshバージョンは、最初の場所以外の場所でエイリアスをタップしませんでしたが、これが設定できることを確認できませんでした。
答え3
次の機能を使用できます。
run_bg() { eval $@ > /dev/null & }
この関数定義行を に追加するだけです~/.bashrc
。
使用法:
run_bg echo "hey"