これは機能します:
$ echo "通知-送信HELLO" | 今は
これはしません:
$現在<echo "notify-send HELLO"
「ファイルまたはディレクトリが見つかりません」と表示されます。
-fこのコマンドにオプションがあることを理解しています。このオプションを使用して、特定の瞬間に実行するファイルを指定できます。
だから、私は考えさせられました...一般的に、リダイレクトオペレーターが値を提供するパラメーターをどのようにして知ることができますか?
これは機能します:
$ echo "通知-送信HELLO" | 今は
これはしません:
$現在<echo "notify-send HELLO"
「ファイルまたはディレクトリが見つかりません」と表示されます。
-fこのコマンドにオプションがあることを理解しています。このオプションを使用して、特定の瞬間に実行するファイルを指定できます。
だから、私は考えさせられました...一般的に、リダイレクトオペレーターが値を提供するパラメーターをどのようにして知ることができますか?
回答:
ここでは2つの異なるものを使用しており、3番目のものを使用する必要があります。どれどれ:
|:これはパイプ演算子であり、あるプロセスの出力を別のプロセスへの入力として渡すのに役立ちます。
foo | bar
これにより、プログラムが実行され、fooその出力がプログラムへの入力として渡されますbar。
>、<、>>および<<:これらはリダイレクト演算子、彼らはから/にデータを送信するのに役立つファイル:
foo > bar:プログラムを実行fooし、その出力を保存し、ファイル bar、上書き1つの、その内容を、それが存在しない場合は、それを作成します。
foo >> bar:プログラムfooを実行し、その出力をファイルに保存して bar、その内容に追加し、存在しない場合は作成します。
foo < bar:実行fooし、ファイル から入力を読み取るように指示しますbar。
これ<<は特殊なケースです。コマンドへの「追加」入力には意味がない<<ため、ここは主に(排他的にAFAIK)ヒアドキュメントに使用されます。
$ cat << EOF > file.txt
> Hello World!
> EOF
構文<< SomeStringHere > Out.fileは、終了文字列(EOF上記の例)に到達するまで書き込まれたすべてのテキストをターゲットファイルにリダイレクトします。ここでドキュメントを使用すると、複数行の文字列を簡単にフォーマットし、変数や特殊文字を含めることができます。
<<<オペレータ、ここで文字列は、ここではドキュメントのようなものですが、それは変数が展開されます。したがって、たとえば:
grep foo <<< "$bar"
上記のコマンドはと同等echo "$bar" | grep fooです。
実際に探しているのはプロセス置換と呼ばれ、コマンドの出力を別の方法に渡すもう1つの方法です。それはで構成されてい<(command)ます。
foo <(bar)
したがって、あなたのat例では、あなたがすることができます
at now < <(echo "notify-send HELLO")
上記が機能するのは、プロセス置換が実際にファイルを作成し(詳細については上記のリンクを参照)、に渡されるのはそのファイルのファイル記述子だ<からat nowです。
1デフォルトの動作は上書きです。これは、noclobberオプションをbashに設定することで変更できます。設定されているecho foo > bar場合、bar存在すると失敗します。その場合は、echo foo |> bar代わりに使用することができます。セクション3.6.2を参照してくださいここに。
<<and に関するいくつかの情報を含めるように拡張してもらえますか<<<(@steeldriverが彼の回答で言及しました)。さらに、もっとあります>>>>>>か<<<<<<<<<<?
<<<:) で止まります
この場合、echo "notify-send HELLO"あるプロセスではないファイル-あなたは必要なプロセスの代替ではなく、ファイルのリダイレクトを
at now < <(echo "notify-send HELLO")
コマンドを完全に回避するためにhere文字列を使用することもできechoます
at now <<< "notify-send HELLO"
foo | barをbar < foo同等だと思っていることです。ではない。