[解決済み] bashで&>は何をするのですか?
2023-06-04 17:37:39
質問
という名前の空っぽのファイルがいつもできてしまうのが不思議だったので、pre-commit hookを見ていて、以下の行を発見しました。
1
という名前の空っぽのファイルがコミットされた後、私のディレクトリにできるのが不思議だったからです。
git status 2&>1 > /dev/null
という書き方が意図されていたと思いますので、修正しました。
git status 2>&1 > /dev/null
しかし、以下の構文が具体的に何をするのかが気になったので、manページを調べてみました。
git status 2&>1
以下はマニュアルページです。
Redirecting Standard Output and Standard Error
This construct allows both the standard output (file descriptor 1) and
the standard error output (file descriptor 2) to be redirected to the
file whose name is the expansion of word.
There are two formats for redirecting standard output and standard
error:
&>word
and
>&word
Of the two forms, the first is preferred. This is semantically equiva‐
lent to
>word 2>&1
しかし、このマニュアルページでは、この2つが同等であることを示唆していますが、そうではなさそうです。
どなたか、man ページを明確にして、この構文で何が起こっているのかを正確に説明していただけませんか。
どのように解決するのですか?
ここで使っている演算子は
-
>
構文 ファイル記述子 opt>
ファイル名 -
>&
構文 ファイル記述子 opt>&
ファイル記述子 -
&>
構文&>
ファイル名
ファイルディスクリプタが省略された場合、デフォルトは
0
(stdin)で入力、または
1
(stdout)で出力します。
2
はstderrを意味する。
ということで、あります。
-
>name
意味1>name
-- stdout をファイルにリダイレクトするname
-
&>name
というのは1>name 2>name
-- stdout と stderr をファイルにリダイレクトします。name
(ただしname
は一度しか開かれないので、もしあなたが実際に1>name 2>name
を開こうとします。name
を 2 回開こうとし、おそらく誤動作します)。
ということは、あなたが
git status 2&>1
と書くと、次のようになります。
git status 2 1>1 2>1
のように、すなわち
-
最初の
2
への引数として渡されます。git status
. -
という名前のファイルにリダイレクトされます。
1
(という名前のファイルにリダイレクトされます(ファイルディスクリプタ1ではありません)。 -
という名前のファイルにリダイレクトされます。
1
このコマンドは、実際には
1
というファイルを作成し、その中身は
git status 2
-- というファイルの状態です。
2
というファイルを実際に追跡していないと仮定すると、おそらく "ブランチは最新、コミットするものはなし、作業ディレクトリはクリーンです" となります。
2
.
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bash prints リテラルの改行をエコーする \n
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] bashで "cat << EOF "はどのように動作するのですか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み】/dev/null 2>&1とは何ですか?
-
[解決済み] bash に次の行に進むように指示する方法
-
[解決済み] このbashのフォーク爆弾はどのように機能するのでしょうか?重複
-
[解決済み] bashでalt + numericを押すと(arg [numeric])と出ますが、これは何でしょう?
-
[解決済み] Bashの履歴にコマンドを表示させないようにするには?
-
[解決済み] グレースフル・シャットダウンプロセスのシグナルはどのような順番で送ればよいのですか?
-
[解決済み] Bash: 関数をパラメータとして渡す
-
[解決済み] bashスクリプトの実行中に出力を強制的にファイルに出力する。
-
[解決済み] 予期しないbashの終了時に作成された一時ファイルを削除する