タグ付けされた質問 「io-redirection」

I / Oリダイレクションはシェルスクリプトで使用されます。この機能により、コマンドの出力を受け取り、それを別のコマンドの入力としてリダイレクトできます。または、コマンドは、標準入力ストリームまたはターミナルからではなく、ファイルから入力を受け取ることができます。プロセス全体で、さまざまな方法でデータストリームを接続できます。

3
execを使用して後続のすべてのコマンドのstderrをリダイレクトします
すべての出力を1つのファイル、デバッグログ、およびターミナルにリダイレクトする必要があるbashファイルがあります。stdoutとstderrの両方をデバッグにリダイレクトし、スクリプト内のすべてのコマンドのログを記録する必要があります。 2>&1 | tee -a $DEBUGファイル内のすべてのコマンドに追加する必要はありません。私は一緒に暮らすことができました| tee -a $DEBUG。 私のようなものでそれをする方法があったことを覚えていますexec 2>&1。 現在、私は次のようなものを使用しています: #!/bin/bash DEBUGLOG=/tmp/debug exec 2>&1 somecommand | tee -a $DEBUGLOG somecommand2 | tee -a $DEBUGLOG somecommand3 | tee -a $DEBUGLOG しかし、それは機能しません。誰かが解決策を持っていますか/原因を説明できますか?

2
`cat <> file`はどのように機能しますか?
cat &lt; fileファイルの内容を標準出力に出力します。 cat &gt; fileCtrl+ Dが検出され、入力テキストがfileに書き込まれるまでstdinを読み取ります。 cat &lt;&gt; file、少なくとも私のバージョンのBashでは、ファイルの内容を(エラーなしで)うまく印刷しますが、ファイルを変更したり、変更タイムスタンプを更新したりしません。 Bash規格&gt;は、3番目のステートメントで無視されているように見えることをどのように正当化しますか?さらに重要なことは、それは何かをしているのですか?

5
ファイルの内容をコマンド「echo」にリダイレクトする
my_file.txt内容が単なる文字列であるという名前のファイルがありますHello。そのコンテンツをコマンドにリダイレクトするにはどうすればよいechoですか? 私は、コマンドを持って知っているless、cat、more...しかし、私はそれを行う必要がありますecho。 私はこれを試しました: $ cat my_file.txt | echo またこれ: $ echo &lt; my_file.txt ただし、どちらの場合も、my_file.txtのコンテンツではなく、stdoutに空白のみが表示されます。 どうすればそれができますか?

4
nc listenの代わりに/ dev / tcp listen
次のようなnetcatリスナーを使用します。 nc -l &lt;port&gt; &lt; ~/.bashrc 新しいマシンで.bashrcを取得できます(ncLDAP がありません)。 cat &lt; /dev/tcp/&lt;ip&gt;/&lt;port&gt; &gt; ~/.bashrc 私の質問はnc -l &lt;port&gt;、私の最初の行の機能を/ dev / tcpの代わりに模倣する方法はありncますか? 私が取り組んでいるマシンは、非常に強化されたラボ/サンドボックス環境RHEL(ssh、nc、LDAP、yum、新しいソフトウェアをインストールできず、インターネットに接続されていません)

4
「>」コマンドの正しい名前は何ですか
私は、&gt;コマンドを使用して既にそこにあるものを上書きせずにファイルにテキストを渡す方法を見つけようとしていましたが、それが何であるかわからないことに気付きました。右矢印または右シェブロン、または複数のコマンドを検索しても何も表示されませんでした。私はいつもそれをパスに呼び出しただけです。

7
あるファイルを別のファイルにリダイレクトするのはUUOC(catの無駄な使用)ですか?
の内容をの内容とfile2一致させたい場合はfile1、明らかに実行するだけcp file1 file2です。 しかし、私が保存したい場合は、すべてについてfile2 除くなど、など、コンテンツ所有者、権限、拡張属性、ACLを、ハードリンクを、そして私が実行したいとは思わないでしょうcp。*その場合、私はちょうどウンチしたいです内容file1にfile2。 次のように実行されるようです。 &lt; file1 &gt; file2 しかし、それは機能しません。 file2何も切り捨てられず、書き込まれません。しかしながら、 cat &lt; file1 &gt; file2 動作します。 最初のバージョンが機能しないことに驚きました。 2番目のバージョンはUUOCですか?単にリダイレクトを使用して、コマンドを呼び出さずにこれを行う方法はありますか? 注:私は、UUOCが真のアンチパターンというよりも重要な点であることを認識しています。 * のようtniles09が発見された、cp 意志をこのケースでは、実際の仕事に。

4
bashを使用してファイルから行を読み取る:for vs. while
テキストファイルを読み取って、bashスクリプトを使用して各行で何かを実行しようとしています。 そのため、次のようなリストがあります。 server1 server2 server3 server4 次のように、whileループを使用してこれをループできると考えました。 while read server; do ssh $server "uname -a" done &lt; /home/kenny/list_of_servers.txt whileループは1回の実行後に停止するためuname -a、server1でのみ実行されます ただし、catを使用したforループでは正常に動作します。 for server in $(cat /home/kenny/list_of_servers.txt) ; do ssh $server "uname -a" done さらに私を困惑させるのは、これも機能するということです。 while read server; do echo $server done &lt; /home/kenny/list_of_servers.txt 最初の反復後に最初の例が停止するのはなぜですか?

7
2>&1> output.logと2>&1の違い| tee output.log
次の2つのコマンドの違いを知りたかった 2&gt;&amp;1 &gt; output.log そして 2&gt;&amp;1 | tee output.log 同僚の1人が2番目のオプションを使用してリダイレクトするのを見ました。私は2&gt;&1が何をするか知っています、私の唯一の質問は、単純なリダイレクト「&gt;」演算子を使用できるteeを使用する目的は何ですか?



7
コマンドまたはシェルスクリプトの出力がstdoutまたはstderrであるかどうかを確認する方法
コマンドまたはシェルスクリプトを実行すると、出力が得られます。このコマンドまたはシェルスクリプトの内部を知らずに、出力がstderrまたはからであるかどうかをどのように判断しstdoutますか? たとえば、 $ ls -ld / drwxrwxr-t 35 root admin 1258 Dec 11 19:16 / 対 ls -ld /test ls: /test: No such file or directory 最初のコマンドが印刷されstdout、2番目のコマンドが印刷されたことを確認するにはどうすればよいstderrですか?

2
「<<(…)」リダイレクトとはどういう意味ですか?
次のコマンドを使用してrvm(rubyバージョンマネージャー)がインストールされていることを確認しました。 bash &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) だから私は理解して、我々はスクリプトの内容を取得し、bashのに渡す(私は信じている&lt; &lt;と&lt;&lt;?同じものである)私はに興味が&lt; &lt;一部、ネット上の説明の後が見つかりました: &lt;&lt; トークン手段は、トークンが見つかるまでプログラムのSTDINとして現在の入力ストリームを使用します。 これはどういうわけか私には明らかではありませんが、誰かが例を作ったり、より簡単な方法で説明したりできますか?

1
ファイル記述子とシェルスクリプト
シェルスクリプトでファイル記述子を使用する方法を理解するのは非常に困難です。 私は次のような基本を知っています exec 5 &gt; /tmp/foo したがって、書き込み用にfd 5がfooに添付されます。 exec 6 &lt; /tmp/bar …読書のため。 exec 5&gt;&amp;- …fdを閉じます。 今、これは何をしますか? #!/bin/bash exec 5 &gt; /tmp/foo exec 6 &lt; /tmp/bar cat &lt;&amp;6 | while read a do echo $a &gt;&amp;5 done 私は理解して&amp;5いるように、fdを閉じますので、各呼び出し後に出力がどのように正常にリダイレクトされていますか? これはからのコピーパスタです:ここ これをシンプルに使用echo $a &gt; fileすると、はるかに速くなると主張していますが、理解できません。適切なチュートリアルへのリンクをいただければ幸いです。私はグーグルパワーが私に失敗しているようだ。

2
ファイルとコマンドからの出力を比較する方法は?
通常、次のように記述します。 diff file1 file2 しかし、私はファイルとコマンドからの出力を比較したいと思います(ここではコマンドを些細なものにします): diff file1 &lt;(cat file2 | sort) OK、これはシェルプロンプトでこれを手動で入力すると動作しますが、シェルスクリプトにまったく同じ行を入力してからスクリプトを実行するとエラーが発生します。 だから、問題は-これを正しく行う方法ですか? もちろん、出力を一時ファイルに書き込むことは避けたいです。

1
SSHによりwhileループが停止します
私はついに数週間苦労してきた問題を解決することができました。リモートでコマンドを実行するために、「承認されたキー」でSSHを使用します。whileループで実行する場合を除き、すべて問題ありません。ループは、sshコマンドでの反復を完了すると終了します。 長い間、これはある種のkshの奇妙さだと思っていましたが、bashが実際に同じように動作することを発見しました。 問題を再現する小さなサンプルプログラム。これは、スナップショットを取得し、クラスター内のノード間でスナップショットを複製する大規模な実装から抽出されます。 #!/bin/bash set -x IDTAG=".*zone" MARKER="mark-$(date +%Y.%m.%d.%H.%M.%S)" REMOTE_HOST=sol10-target ZFSPARENT=rpool ssh $REMOTE_HOST zfs list -t filesystem -rHo name,mounted $ZFSPARENT | grep "/$IDTAG " &gt; /tmp/actionlist #for RMT_FILESYSTEM in $(cat /tmp/actionlist) cat /tmp/actionlist | while read RMT_FILESYSTEM ISMOUNTED do echo ${RMT_FILESYSTEM}@${MARKER} [ "$ISMOUNTED" = "yes" ] &amp;&amp; ssh $REMOTE_HOST zfs …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.