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

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

2
コマンドの出力をシェル変数に割り当てるにはどうすればよいですか?
式の結果を変数に割り当て、それを文字列と連結してからエコーします。ここに私が持っているものがあります: #!/bin/bash cd ~/Desktop; thefile= ls -t -U | grep -m 1 "Screen Shot"; echo "Most recent screenshot is: "$thefile; しかし、その出力: Screen Shot 2011-07-03 at 1.55.43 PM.png Most recent screenshot is: したがって、それはに割り当てられておらず$thefile、実行時に印刷されているように見えます。

10
標準エラーストリーム(stderr)をgrepする方法は?
ffmpegを使用して、オーディオクリップのメタ情報を取得しています。しかし、私はそれを理解することができません。 $ ffmpeg -i 01-Daemon.mp3 |grep -i Duration FFmpeg version SVN-r15261, Copyright (c) 2000-2008 Fabrice Bellard, et al. configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib --mandir=/usr/share/man --arch=i386 --extra-cflags=-O2 ... 私がチェックしたところ、このffmpegの出力はstderrに向けられています。 $ ffmpeg -i 01-Daemon.mp3 2> /dev/null したがって、grepは一致する行をキャッチするためにエラーストリームを読み取ることができないと思います。grepでエラーストリームを読み取ることができるようにするにはどうすればよいですか? nixCraftリンクを使用して、標準エラーストリームを標準出力ストリームにリダイレクトすると、grepが機能しました。 $ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration Duration: 01:15:12.33, start: 0.000000, …

6
whileループを使用して複数のサーバーにSSH接続する
servers.txtサーバーのリストを含むファイルがあります: server1.mydomain.com server2.mydomain.com server3.mydomain.com ファイルをwhile1行ずつ読み取り、各行をエコーすると、すべて正常に機能します。すべての行が印刷されます。 $ while read HOST ; do echo $HOST ; done < servers.txt server1.mydomain.com server2.mydomain.com server3.mydomain.com ただし、すべてのサーバーにsshしてコマンドを実行すると、突然whileループが機能しなくなります。 $ while read HOST ; do ssh $HOST "uname -a" ; done < servers.txt Linux server1 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux これは、リストの最初のサーバーのみに接続し、すべてのサーバーには接続しません。ここで何が起こっているのか分かりません。誰か説明してもらえますか? forループを使用するとうまく機能するため、これはさらに奇妙です。 …

7
いつ追加のファイル記述子を使用しますか?
ファイル記述子を作成して、出力をリダイレクトできることを知っています。例えば exec 3<> /tmp/foo # open fd 3. echo a >&3 # write to it exec 3>&- # close fd 3. ただし、ファイル記述子がなくても同じことができます。 FILE=/tmp/foo echo a > "$FILE" 追加のファイル記述子を使用する必要がある場合の良い例を探しています。

4
/ dev / null /へのcronジョブを完全に消音するにはどうすればよいですか?
Ubuntuデスクトップとdebianサーバーには、毎分実行する必要があるスクリプト(私のスペースオンラインbrowsergameの分ティックを呼び出すスクリプト)があります。 問題は、debian派生ではcronが/var/log/syslog実行するたびにログを記録することです。私はそれが繰り返し実行されたメッセージを繰り返し見ることになります/var/log/syslog: Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1) プログラムの出力を抑制するために/dev/null、たとえば、プログラムからすべてのエラーおよび警告メッセージを隠すためにリダイレクトできることを知っています。このようにcrontabに行を作成できます。 * * * * * root /usr/local/sbin/mycommand.sh > /dev/null しかし、私はcronジョブを実行し、生成されたすべての出力またはエラーがNULLにパイプされることを確認したいので、syslogでメッセージを生成せず、電子メールを生成しません 編集: cronログを変更して、ここで提案されているような別のログにリダイレクトするソリューションがあります/etc/syslog.conf しかし、欠点は、すべてのcronjobのすべての出力がリダイレクトされることです。 どういうわけか、単一のcronjobを個別のログファイルにリダイレクトすることはできますか?できれば、cron.hourlyファイル自体の内部で構成可能です。

8
入力ファイルを変換された出力でiconvに置き換えるにはどうすればよいですか?
ディレクトリ内のすべての* .phpファイルを列挙して適用するbashスクリプトがありますiconv。これは、STDOUTに出力を取得します。 -o(私の経験では)パラメーターを追加すると、おそらく変換が行われる前に空のファイルが実際に書き込まれるので、変換を行うようにスクリプトを調整し、入力ファイルを上書きするにはどうすればよいですか? for file in *.php do iconv -f cp1251 -t utf8 "$file" done


1
/ bin / shを使用して、stderrとstdoutの両方を/ dev / nullにリダイレクトします
私は両方をリダイレクトする方法のすべての種類試してみましたstdoutとstderrすると/dev/null任意の成功なし。私はこの問題を経験したことのないほぼすべてのライフランbashを持っていますが、BSDで私は一度立ち往生してい/bin/shます。 私が試したこと: if ls ./python* 2> /dev/null; then echo found Python fi ...動作します; Pythonが存在しない場合、lsからのエラーメッセージがミュートされます。ただし、python.tgz存在する場合は、次のような行が出力されます。 # ./test.sh ./python-2.7.3p1.tgz 私はもう試した: if ls ./python* &> /dev/null; then echo found Python fi そして if ls ./python* 2>1 > /dev/null; then echo found Python fi そして if ls ./python* > /dev/null; then echo found Python …

1
このコマンドはどのように合法ですか?「> file1 <file2 cat」
file2既に存在すると仮定すると、コマンド &gt; file1 &lt; file2 cat のコンテンツをにコピーしているfile2ようfile1です。 しかし、この構造は理解できません。 「何も」がに向けられていることを理解していますfile1(コンテンツの作成または消去)。次に、のコンテンツfile2はに向けられていfile1ます。 なぜcat後file2ですか?cat file2オペランドが正しい順序になっていないことをどのように知るのですか?

5
sudoを使用したリダイレクトまたはパイピングを含むコマンドの実行方法
ルートアカウントの代わりにsudoを使用するのがベストプラクティスであると想定しているものに従うようにしています。 次のような単純な連結ファイル操作を実行しています。 sudo echo 'clock_hctosys="YES"' &gt;&gt; /etc/conf.d/hwclock これは、通常のユーザーとして実行されている「&gt;&gt;」の右側に関しては失敗します。余分なsudoの追加も失敗します(ファイルではなくsudoコマンドにパイプするため、予期される動作)。 例はそれだけですが、ルートアカウントで検証およびテストされています。

2
ヒアドキュメントと猫と組み合わせて出力リダイレクトをどのように使用しますか?
別のコマンドにパイプする、またはファイルにリダイレクトする(sh例のためにパイプする)スクリプトがあるとしましょう。私はbashを使用していると仮定します。 私はそれを使用してそれを行うことができますecho: echo "touch somefile echo foo &gt; somefile" | sh 私もほとんど同じことをすることができますcat: cat &lt;&lt; EOF touch somefile echo foo &gt; somefile EOF しかし、「EOF」を「EOF | sh」に置き換えると、それは単にヒアドキュメントの一部であると考えるだけです。 cat標準入力からテキストを出力し、それを任意の場所にパイプで送るようにするにはどうすればよいですか?


3
ファイル記述子を閉じる、>&-vs <&-
私が読んでいるbashチュートリアルでは、読み取りのためにファイル記述子を開くと、つまり exec 3&lt; echolist 次に、このように閉じなければなりません、 exec 3&lt;&amp;- ただし、ファイル記述子を書き込み用に開く場合は、次のように閉じる必要があります。 exec 3&gt;&amp;- しかし、私がインターネットで見ると、人々がファイルを開いて、これでファイルを閉じているのが見えます: exec 3&gt;&amp;- 注:チュートリアルに従って、を使用する必要がある場合exec 3&lt;&amp;1。 だから私の質問は、exec n&gt;&amp;-nがファイル記述子番号である場合、すべてのファイル記述子を閉じることができますか?読み取り、書き込み、またはその両方で開かれたかどうかに関係なく?

5
コマンドラインプログラムは、出力のリダイレクトを防ぐことができますか?
私はこれを行うのに慣れてきました: someprogram &gt;output.file プログラムが生成した出力をファイルに保存するときはいつでも行います。また、このIOリダイレクションの 2つのバリアントも認識しています。 someprogram 2&gt;output.of.stderr.file (stderrの場合) someprogram &amp;&gt;output.stderr.and.stdout.file (stdoutとstderrの両方を組み合わせた場合) 今日、私は考えられない状況に出くわしました。次のコマンドを使用しますxinput test 10が、予想どおり次の出力があります。 user @ hostname:〜$ xinputテスト10 キープレス30 キーリリース30 キープレス40 キーリリース40 キーを押して32 キーリリース32 キープレス65 キーリリース65 キーを押す61 キーリリース61 キープレス31 ^ C user @ hostname:〜$ この出力は、通常のようにファイルに保存できると期待していましたxinput test 10 &gt; output.file。しかし、私の期待に反する場合、ファイルoutput.fileは空のままです。これはxinput test 10 &amp;&gt; output.file、stdoutまたはstderrで何かを見逃さないようにするためにも当てはまります。 私は本当に混乱しているので、xinputプログラムに出力がリダイレクトされるのを避ける方法があるかどうかをここで尋ねますか? 更新 私はソースを見ました。出力はこのコードによって生成されるようです(以下のスニペットを参照)。私には、出力は通常のprintfによって生成されるように見えます //test.cファイル内 static void print_events(表示* …


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