[解決済み] Bashでコマンド出力を隠す方法
質問
Bashスクリプトをエンドユーザーにとってよりエレガントなものにしたいです。Bash がコマンドを実行しているときに出力を隠すにはどうすればよいですか。
たとえば、Bashが
yum install nano
Bashを実行したユーザーには、以下のように表示されます。
Loaded plugins: fastestmirror
base | 3.7 kB 00:00
base/primary_db | 4.4 MB 00:03
extras | 3.4 kB 00:00
extras/primary_db | 18 kB 00:00
updates | 3.4 kB 00:00
updates/primary_db | 3.8 MB 00:02
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.0.9-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
nano x86_64 2.0.9-7.el6 base 436 k
Transaction Summary
================================================================================
Install 1 Package(s)
Total download size: 436 k
Installed size: 1.5 M
Downloading Packages:
nano-2.0.9-7.el6.x86_64.rpm | 436 kB 00:00
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <[email protected]>
Package: centos-release-6-4.el6.centos.10.x86_64 (@anaconda-CentOS-201303020151.x86_64/6.4)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : nano-2.0.9-7.el6.x86_64 1/1
Verifying : nano-2.0.9-7.el6.x86_64 1/1
Installed:
nano.x86_64 0:2.0.9-7.el6
Complete!
さて、これをユーザーから隠して、代わりに表示したい。
Installing nano ......
どうすればこのタスクを達成できるでしょうか?スクリプトをより使いやすくするために、ぜひお手伝いさせてください。エラーが発生した場合、ユーザーに表示される必要があります。
一連のコマンドの実行中に同じメッセージを表示する方法を知りたいのですが。
どのように解決するのですか?
これを使います。
{
/your/first/command
/your/second/command
} &> /dev/null
説明
コマンドからの出力をなくすには、2つの方法があります。
-
出力記述子ファイルを閉じ、それ以上の入力を受け付けないようにします。それは次のようになります。
your_command "Is anybody listening?" >&-
通常、出力はファイルディスクリプタ1(stdout)か2(stderr)のどちらかになります。ファイルディスクリプタをクローズする場合、番号が振られたディスクリプタごとに
&>
(以下) は BASH の特殊な構文で>&-
:/your/first/command >&- 2>&-
順序に注意してください。
>&-
stdoutを閉じる というように、やりたいことは&>-
という名前のファイルに stdout と stderr をリダイレクトします。-
(ハイフン) という名前のファイルにリダイレクトしますが、これはあなたがやりたいこととは違います。最初は同じように見えますが、後者は作業ディレクトリに迷子ファイルを作成します。覚えるのは簡単です。>&2
は標準出力を記述子 2 (stderr) にリダイレクトします。>&3
は標準出力をディスクリプタ 3 にリダイレクトします。>&-
はstdoutを行き止まりにリダイレクトします(つまり、stdoutを閉じます)。また、コマンドによっては、閉じたファイル記述子をうまく扱えないことがあるので注意してください ("write error: Bad file descriptor")、そのため、より良い解決策は...
-
へのリダイレクト出力
/dev/null
これはすべての出力を受け入れ、それに対して何もしません。このようになります。your_command "Hello?" > /dev/null
ファイルへの出力リダイレクトについては、stdoutとstderrの両方を同じ場所に非常に簡潔に指示することができますが、bashに限ったことです。
/your/first/command &> /dev/null
最後に、一度に多くのコマンドに対して同じことを行うには、全体を中括弧で囲みます。Bashはこれを
コマンドのグループ
として扱い、出力ファイルディスクリプタを集約して、一度にすべてをリダイレクトできるようにします。もし、サブシェルに慣れていて
( command1; command2; )
構文を使ったサブシェルに慣れている方は、中括弧がほとんど同じように動作することがわかると思います。
{
/your/first/command
/your/second/command
} &> /dev/null
を参照してください。 bash のリダイレクトに関するマニュアルを参照してください。 を参照してください。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Bashで変数が設定されているかどうかを確認する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Bashを使用してコマンドからの出力をすべて抑制するにはどうすればよいですか?
-
[解決済み] 現在の日付と時刻を句読点を使わずに表示する
-
[解決済み] bashで変数に改行を埋め込もうとする [重複].
-
[解決済み] Bashで引用符で囲まれた文字列の中で環境変数を使用する方法
-
[解決済み] bash で "set -o nounset" を使用したときに変数が設定されているかどうかをテストする。
-
[解決済み] bashで端末の最終行を削除して置換するには?
-
[解決済み] unset の使用と変数への空の設定
-
[解決済み] Bashでディレクトリではなく、ファイルだけをリストアップする方法は?
-
[解決済み] homebrew パッケージがインストールされているかどうかを検出する
-
[解決済み] MSYSでフォルダを閲覧する