パイプ記号("|")
前のコマンドの出力を、次のコマンドの入力として使用してください。 複数のコマンドは、複数のパイプ記号を使用して接続できます。
# 输出字符串'hello world'给wc命令进行单词数量统计
echo "hello world" | wc -w
# 输出:
2
出力リダイレクト演算子(">")
コマンドの出力をファイルにリダイレクトします。 リダイレクトの説明:通常、プログラムは標準出力(stdout)に出力します。標準出力は通常、使用している端末です。リダイレクト演算子は、標準出力を標準出力以外の場所にリダイレクトします。
# 将字符串hello world重定向(写入)到文件hello.txt中
# 如果文件不存在,则创建文件;如果文件存在,则覆盖文件内容
echo "hello world" > hello.txt
# 输出hello.txt文件内容
cat hello.txt
# 输出:
hello world
リダイレクト演算子(">>") を追加します
コマンドの出力をファイルに追加します。
# 将字符串hello world追加到文件hello.txt中
# 如果文件不存在,则创建文件;如果文件存在,则追加内容到文件末尾
echo "hello world" >> hello.txt
# 输出hello.txt文件内容
cat hello.txt
# 输出:
hello world
hello world
echoコマンドはデフォルトでは1行を出力するため、出力は自動的に改行文字で終わります。
入力リダイレクト文字("<")
コマンドの入力としてファイルを使用してください。
echo "hello world" > hello.txt
# 将文件hello.txt作为wc命令的输入
wc -w < hello.txt
# 输出:
2
複数行入力のリダイレクト文字("<<")
ヒアドキュメントとも呼ばれ、コマンドの入力として複数行の文字列を受け取ります。
# 将多行字符串作为wc命令的输入
# 用EOF(end of file)作为结束标志是惯例,可以用其他的。
# EOF前后不能有任何字符或空格。
wc -w << EOF
> hello world
> hello world
> EOF
# 输出:
4
特別なリダイレクト記号
このプログラムは実行時に以下の3つのファイルを開きます。
標準入力ファイル(stdin)
標準入力のファイルディスクリプタは0であり、プログラムはデフォルトで標準入力からデータを読み込みます。
標準出力ファイル(stdout)
stdoutのファイルディスクリプタは1であり、プログラムはデフォルトでstdoutにデータを出力します。
標準エラーファイル(stderr)
stderr のファイルディスクリプタは 2 であり、プログラムはエラー情報を stderr ストリームに書き込みます。
エラー出力リダイレクト文字("2>")
# 将命令的错误输出重定向到文件error.txt中
# 如果文件不存在,则创建文件;如果文件存在,则覆盖文件内容
ls not-exist-directory/ 2> error.txt
# 输出error.txt文件内容
cat error.txt
# 输出:
ls: cannot access 'not-exist-directory/': No such file or directory
標準出力とエラー出力を結合します (">&")
1>&2の正しい戻り値は出力チャネル 2 に渡されます。&2 は、出力チャネル 2 が正しい出力チャネルであることを示します。
2>&1のエラー戻り値は出力チャネル 1 に渡されます。ここで、&1 は出力チャネル 1 を示します。
スペースは入れないでください。
ファイル構造を作成する
mkdir exist-directory
touch exist-directory/exist-file.txt
# 将命令的错误输出合并到标准输出通道
# 并写入文件out.txt中
ls not-exist-directory/ exist-directory/ > out.txt 2>&1
# 输出out.txt文件内容
cat out.txt
# 输出:
ls: cannot access 'not-exist-directory/': No such file or directory
exist-directory/:
exist-file.txt
# 先理解
ls not-exist-directory/ exist-directory/ > out.txt
# 等于
ls not-exist-directory/ exist-directory/ 1> out.txt
# 这是将标准输出重定向到文件out.txt中,而错误输出还是输出到终端
# 同理
ls not-exist-directory/ exist-directory/ 2> out.txt
# 这是将错误输出重定向到文件out.txt中,而标准输出还是输出到终端
# 将命令的标准输出合并到错误输出
# 并将合并后的错误输出写入文件out.txt中
ls not-exist-directory/ exist-directory/ 2> out.txt 1>&2
# 输出out.txt文件内容
cat out.txt
# 输出:
ls: cannot access 'not-exist-directory/': No such file or directory
exist-directory/:
exist-file.txt
出力をファイルにマージする(「&>」)
# 将命令的标准输出和错误输出合并到文件out.txt中。
# 是上面两种方式的简写
ls not-exist-directory/ exist-directory/ &> out.txt
# 输出out.txt文件内容
cat out.txt
# 输出:
ls: cannot access 'not-exist-directory/': No such file or directory
exist-directory/:
exist-file.txt
したがって、一般的なコマンドには以下が含まれます。
xxx &> /dev/null
xxx > /dev/null 2>&1
これは、 xxxプログラムの標準出力とエラー出力を/dev/nullファイルにリダイレクトすることを意味します。つまり、出力を破棄します。
Very helpful :D, arch tutorial next?