呼び出しは、単に端末に入力されたud
です。 ud
は、私の~/.bash_aliases
:
alias ud='Sudo apt-get update && Sudo apt-get upgrade -y && Sudo apt-get dist-upgrade -y && Sudo apt-get clean -y'
クイック検索の後、ログファイルの保守に推奨される次の方法を見つけました(make install
元の投稿から):
$ make install > file.txt 2>&1
ここに問題があります。これを自分のニーズに合わせても、次の構文から期待される結果が得られません。
$ ud > file.txt 2>&1
私が得るのは、コマンドが画面上の標準出力に対して実行され、0バイトのテキストファイルが生成されるということです。私が達成したいのは、ls
に対して次のような出力テキストファイルを作成することです。
$ ls > file.txt 2>&1
何が起こっているのかを誰かに説明してもらえますか?
最後に、次の結果は説明できません。
$ $(ud) > file.txt
La commande « Ign » est introuvable, vouliez-vous dire :
La commande « tgn » du paquet « tgn » (universe)
Ign : commande introuvable
$ echo $(ud) > file.txt
サブシェルでコマンドを実行します。
(ud) > file.txt 2>&1
これには、サブシェルで実行するエイリアスud
にコマンドがあり、すべてのコマンドのSTDOUTおよびSTDERRを親シェルにリダイレクトして、すべてのコマンドのSTDOUTおよびSTDERRを同じにリダイレクトできるようにします。親シェルから一度にファイルします。
または、@ steeldriverが示唆したように、すべてのコマンドがグループ化され、STDOUTとSTDERRが一度にリダイレクトされるように、エイリアスを次のように設定することもできます。
alias ud='{ Sudo apt-get update && Sudo apt-get upgrade -y && Sudo apt-get dist-upgrade -y && Sudo apt-get clean -y ;}'
これで、コマンドを次のように実行できます。
ud > file.txt 2>&1
さて、あなたが間違っていたことを理解しましょう:
エイリアスを次のように設定しました。
alias ud='Sudo apt-get update && Sudo apt-get upgrade -y && Sudo apt-get dist-upgrade -y && Sudo apt-get clean -y'
実行すると、次のようになります。
ud > file.txt 2>&1
最後に成功または失敗したコマンドのSTDOUTおよび(または)STDERRのみがfile.txt
にリダイレクトされ、以前のすべてのコマンドが実行され、そのコマンドの終了コード(成功&&
)に応じて次のコマンドが実行されます。したがって、あなたの場合、すべてのコマンドが成功し、Sudo apt-get clean -y
が.deb
ファイルを/var/cache/apt/archives
からすべて削除し、STDOUTを表示せずに空のファイルを取得しました。