&0" とはどういう意味ですか?">

"sh a.sh <&0>&0" とはどういう意味ですか?

&0" とはどういう意味ですか?">

sh a.sh <&0 >&0- どういう意味ですか?特に、それがどういう意味なのかよく分からないんです&0

ベストアンサー1

n>&pファイル記述子(fd)をファイル記述子にn<&pコピーするために使用されるのと同じ演算子。つまり、ファイル記述子をfdがリダイレクトするリソースにリダイレクトします。pnnp

リダイレクトされたファイル記述子が使用される方向(読み取りまたは書き込み)を決定するために使用されませ<ん。と同じ方向になります。つまり、書き込み用に開いている場合は、この演算子を使用しても同様です。>nppnn<&p

2つの演算子の唯一の違いは、n指定されていない場合です。>&pstdoutをリダイレクトし(またはに似ています)、stdinをリダイレクトします(またはに似てい1>&pます1<&p)。<&p0<&p0>&p

<&0同様に、0<&0stdinをリダイレクトされるリソースにstdinをリダイレクトするので、役に立つものはなく、通常は機能しません。

しかし、すべてのシェルで常に機能しているわけではありません。ジョブ制御が無効になると、POSIXはバックグラウンドコマンドのstdinをそのファイル/dev/nullまたは同等のファイルにリダイレクトする必要があります。<&0これはBashで上書きされます(4.4.12でテスト済み)。比較(ls -l /proc/self/fd/0 &)して(<&0 ls -l /proc/self/fd/0 &)。これは状況によっては便利です。

>&0fd 0 を fd 1 にコピーします。 fd 1(stdout)は慣例的に書き込みにのみ使用されるため、>&0fd 0が読み取り+書き込みモードで開く場合にのみ意味があります。

これは fd 0 が端末装置を指すときに発生します。ターミナルエミュレータはgetty通常、ターミナルデバイスを読み書きモードで開き、fd 0、1、2をここに割り当てるためです。

したがって、この記事を書いた人は、stdinがターミナルを指していると仮定し、stdoutをターミナルにリダイレクトしたかったでしょう。

意味のある場所の1つn>&nはzshとそのmult_IOs機能です。存在するzsh

some-cmd >&1 > some-file
# that is: some-cmd 1>&1 1> some-file

次のように、標準出力をsome-cmd(&1)以前のすべてのstdoutにリダイレクトします。some-file

some-cmd | tee some-file

しかし、

some-cmd <&0 < some-file
# that is: some-cmd 0<&0 0< some-file

次のように生の標準入力を最初に入力し、次に入力some-fileとして提供します。some-cmd

cat - some-file | some-cmd

ただし、cmd <&0 >&0fd 0では一度だけリダイレクトされるため、適用されません。

n>&nkshまた、一部のシェル(、、zshnot、dashまたは)では、ファイル記述子が開いていないとエラーが発生し、コマンドの実行を中断する可能性があるため、bash興味深い副作用があります。だからその殻の中にyashn

cmd 0<&0

cmd終了病理学的条件下での実行を防ぎますstdin

$ ksh -c 'cat file - <&0' <&-
ksh: 0: cannot open [Bad file descriptor]
$ mksh -c 'cat file - <&0' <&-
mksh: <&0 : bad file descriptor
$ zsh -c 'cat file - <&0' <&-
zsh:1: 0: bad file descriptor

$ bash -c 'cat file - <&0' <&-
contents of file
cat: -: Bad file descriptor
cat: closing standard input: Bad file descriptor

おすすめ記事