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

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

10
ファイルに複数の行を追加する方法
ファイルが存在しない場合はそれを探して作成し、これを追加するbashスクリプトを作成しています。 Host localhost ForwardAgent yes だから"line then new line 'tab' then text"私はそれが敏感なフォーマットだと思う。私はあなたがこれを行うことができることを知っています: cat temp.txt >> data.txt しかし、その2行からは奇妙に見えます。これをこの形式で追加する方法はありますか? echo "hello" >> greetings.txt

3
シェルの制御演算子とリダイレクト演算子は何ですか?
さまざまなコマンドをさまざまなシンボルに接続するチュートリアルをオンラインでよく見ます。例えば: command1 | command2 command1 & command2 command1 || command2 command1 && command2 他の人はコマンドをファイルに接続しているようです: command1 > file1 command1 >> file1 これらは何ですか?彼らは何と呼ばれている?彼らは何をしますか?それらはもっとありますか? この質問に関するメタスレッド。。

9
別のbashセッションで実行中のプロセスの出力を表示する方法は?
ローカルマシンで作業していたときから、リモートマシンで実行中のスクリプトを残しました。同じユーザーとしてSSH経由でマシンに接続し、スクリプトが実行されてpsいるのを確認できます。 $ ps aux | grep ipcheck myuser 18386 0.0 0.0 18460 3476 pts/0 S+ Dec14 1:11 /bin/bash ./ipchecker.sh ローカルセッションでstdoutに出力するだけです(./ipchecker.shローカルターミナルウィンドウから実行しました。リダイレクトも使用もしていませんscreen)。 とにかくSSHセッションから、この実行中のコマンドの出力を(停止することなく)表示できますか? これまでのところ、私が見つけた最高のものは使用することです。strace -p 18386しかし、私は画面上を飛び回る大量のテキストを取得します。strace出力を停止してふるいにかけると、テキストが標準出力に印刷されますが、非常に長く混乱しやすく、停止している間に何かを見逃す可能性があります。ローカルで作業しているかのように、スクリプト出力をライブで表示する方法を見つけたいと思います。 誰でもこれを改善できますか?明らかな答えは、リダイレクトまたはscreenセッションなどでスクリプトを再起動することです。これはミッションクリティカルなスクリプトではないので、それを行うことができます。むしろ、これは楽しい学習エクササイズだと思っています。


8
複数のコマンドに標準出力を送信するにはどうすればよいですか?
入力をフィルタリングまたは処理し、それを出力として渡すstdoutコマンドがいくつかありますが、通常はそうなると思いますが、一部のコマンドはそれを受け取り、stdinそれで何でもし、何も出力しません。 私はOS Xで最もよく知っているので、気になる二人はすぐにありますされているpbcopyとpbpaste-システムクリップボードにアクセスする手段です。 とにかく、stdoutを使用して出力を吐き出し、両方stdoutとファイルに移動する場合は、teeコマンドを使用できることを知っています。そして、私は少し知っxargsていますが、私はそれが私が探しているものだとは思わない。 stdout2つ(またはそれ以上)のコマンドに分割する方法を知りたい。例えば: cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors おそらくそれよりも良い例がありますが、私はそれを中継しないコマンドにstdoutを送信し、stdout「ミュート」されないようにする方法を知っていることに本当に興味がcatあります- grepその一部をクリップボードにコピーします-特定のコマンドはそれほど重要ではありません。 また、私はこれをファイルに送信する方法を尋ねていませんstdout-これは「重複」の質問かもしれません(申し訳ありません) -そして、それらの質問に対する答えはのようteeでした。 最後に、「pbcopyをパイプチェーンの最後のものにしないのはなぜですか?」私の応答は1)それを使用して、コンソールに出力を表示したい場合はどうなりますか?2)stdout入力を処理した後に出力しない2つのコマンドを使用する場合はどうなりますか? ああ、もう1つ-私teeは名前付きパイプ(mkfifo)を使用できることを理解していますが、事前にセットアップせずに、これをインラインで簡潔に行う方法を望んでいました:)

2
systemdサービスの標準出力/標準エラーを表示する
カスタムアプリケーション用の単純なsystemdサービスファイルを作成しました。手動で実行するとアプリケーションは正常に動作しますが、systemdで実行するとCPUが最大になります。 私は私の問題がどこにあるかを追跡しようとしていますが、どこに出力があるのか​​わかりません(またはsystemdが出力をどこかに配置するように設定する方法)。 これが私のサービスファイルです。 [Unit] Description=Syncs files with a server when they change Wants=network.target After=network.target [Service] ExecStart=/usr/local/bin/filesync-client --port 2500 WorkingDirectory=/usr/local/lib/node_modules/filesync-client Restart=always [Install] WantedBy=multi-user.target アプリケーション全体で、stdoutとstderrに出力します。 デーモンの出力を読み取るにはどうすればよいですか? 編集: を見つけましたがman systemd.exec、StandardOutput=オプションについて言及しましたが、どのように使用するのかわかりません。manページから: StandardOutput= 実行されたプロセスのファイル記述子1(STDOUT)の接続先を制御します。inherit、null、tty、syslog、kmsg、kmsg + console、syslog + consoleまたはsocketのいずれかを取ります。 標準入力のファイル記述子を継承するように設定されている場合、標準出力用に複製されます。nullに設定すると、標準出力はに接続されます/dev/null。つまり、書き込まれたものはすべて失われます。ttyに設定されている場合、標準出力はttyに接続されます(を介して設定されたTTYPath=とおり、以下を参照)。TTYが出力に使用される場合、実行されたプロセスのみが端末の制御プロセスにならず、失敗したり、他のプロセスが端末を解放するのを待ったりしません。 syslogは標準出力をsyslog(3)システムロガーに接続します。 kmsgは、dmesg(1)を介してアクセス可能なカーネルログバッファに接続します。 syslog + consoleおよびkmsg + console同様に機能しますが、出力をシステムコンソールにもコピーします。 socketは、ソケットのアクティブ化から標準出力をソケットに接続します。セマンティクスはのそれぞれのオプションに似ていますStandardInput=。この設定はデフォルトで継承されます。 これは、これらが私の唯一のオプションであることを意味しますか?たとえば、出力を/dev/shm何かに入れたいです。Unixドメインソケットを使用して簡単なリスナーを作成できると思いますが、これは少し不要なようです。 デバッグに必要なのはこれだけで、おそらくほとんどのログを削除して、出力をsyslogに変更することになります。

1
Bash:「> |」は何をしますか?
これを書き留めたところを見ました。 $ some-command >| /tmp/output.txt 垂直パイプは、1つのコマンドの出力を別のコマンドに「パイピング」する標準リダイレクトで使用されますが、このシナリオの>|場合と同じように、実際にはまったく役に立ちませ>んか?

7
入力としてwgetの出力をunzipにリダイレクトする方法は?
このリンクからファイルをダウンロードする必要があります。ダウンロードしたファイルはzipファイルで、現在のフォルダーで解凍する必要があります。 通常は、まずダウンロードしてから、unzipコマンドを実行します。 $ wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip $ unzip temp.zip ただし、この方法では、2つのコマンドを実行し、最初のコマンドが完了するのを待って次のコマンドを実行する必要があります。また、ファイルの名前を知ってから、temp.zipに渡す必要がありますunzip。 それはの出力をリダイレクトすることが可能であるwgetのunzip?何かのようなもの $ unzip < `wget http://www.vim.org/scripts/download_script.php?src_id=11834` しかし、うまくいきませんでした。 bash::wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zipあいまいなリダイレクト また、wget2回実行され、ファイルを2回ダウンロードしました。

7
書き込み権限のないファイルへのstdoutのリダイレクト
書き込み権限を持たずにファイルを変更しようとすると、エラーが発生します。 > touch /tmp/foo && sudo chown root /tmp/foo > echo test > /tmp/foo zsh: permission denied: /tmp/foo rootとしてコマンドを実行するため、sudoingは役に立ちませんが、シェルはstdoutのリダイレクトを処理し、とにかくファイルを開きます: > sudo echo test > /tmp/foo zsh: permission denied: /tmp/foo ルートとしてシェルを開き、その方法でファイルを操作する以外に、書き込み権限のないファイルにstdoutをリダイレクトする簡単な方法はありますか? > sudo su # echo test > /tmp/foo

1
nohup.out以外のログファイルにnohup出力をリダイレクトする方法はありますか?
nohupプロセスがハングアップの影響を受けないように、プログラムを頻繁に使用します。したがって、プログラムprogramをハングアップの影響を受けないようにするには、コマンドを使用します nohup program & &プロセスをバックグラウンドで配置する場所。 起動時にnohup、次のメッセージが表示されます。 nohup:出力を「nohup.out」に追加します 出力をファイルに送信する方法はありますnohup.outか?多くのnohup場合、を使用して同じディレクトリで多くのプロセスを実行しますが、これを行うと、すべての出力が1つのnohup.outファイルにまとめられます。 マニュアルページ(たとえば、ここ)には、ログファイルを指定するオプションがないようです。これを確認してもらえますか?また、この問題をどのように回避できるかについての考えはありますか?

2
cron内から出力をファイルにリダイレクトする方法は?
私は一日の特定の時間に実行する必要があるバックアップスクリプトを持っているので、私はcronこのタスクに使用しており、cron内からバックアップスクリプトの出力をlogfile。 crontab -e */1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log 上記のcronエントリでは、両方stderr and stdoutをログファイルにリダイレクトしています。 上記のcronジョブはsyslog 、backup.shファイルに従って指定されたタスクに従って正常に実行されますが、ログファイルには何も書き込みません。 /var/log/syslog Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log) CLIからスクリプトを実行すると、必要に応じて機能し、出力がログファイルに書き込まれます ranveer@ranveer:~$ ./backup.sh &>> backup.log ranveer@ranveer:~$ cat backup.log Fri Oct 19 20:28:01 IST 2012 successfully copied testdir test.txt successfully copied ------------------------------------------------------------------------------------- ranveer@ranveer:~$ だから、ファイルの出力がcron内からファイルにリダイレクトされないのはなぜですか。

4
「catファイル| ./binary」および「./binary <file」?
バイナリ(変更できない)があり、次のことができます。 ./binary &lt; file 私もできる: ./binary &lt;&lt; EOF &gt; "line 1 of file" &gt; "line 2 of file" ... &gt; "last line of file" &gt; EOF しかし cat file | ./binary エラーが発生します。パイプで動作しない理由がわかりません。3つの場合すべてで、ファイルのコンテンツはバイナリの標準入力に(さまざまな方法で)与えられます。 bashはファイルを読み取り、バイナリの標準入力に渡します bashはstdinから(EOFまで)行を読み取り、それをバイナリの stdinに渡します catはファイルの行を読み取ってstdoutに書き込み、bashはそれらをバイナリの stdinにリダイレクトします 私が理解している限り、バイナリはこれら3つの違いに気付かないはずです。3番目のケースが機能しない理由を誰かが説明できますか? ところで:バイナリによって与えられるエラーは次のとおりです。 20170116 / 125624.689-U3000011スクリプトファイル ''を読み取れませんでした、エラーコード '14'。 しかし、私の主な質問は、その3つのオプションを持つプログラムにどのような違いがあるのかということです。 ここではいくつかの詳細については、以下のとおりです。私は再びそれを試してみましたstraceの 多少の誤差は、実際にあったESPIPE(不正がシーク)からのlseek 続く(不良アドレス)EFAULTから読み込む右のエラーメッセージの前に。 私は(一時ファイルを使用せずに)Rubyスクリプトでコントロールしようとしたバイナリはの一部であるcallapiからAutomic(UC4) 。

5
プロセス置換とパイプ
私は次を理解する方法を疑問に思っていました: コマンドのstdoutを別のコマンドのstdinにパイプすることは強力な手法です。しかし、複数のコマンドの標準出力をパイプする必要がある場合はどうでしょうか?これがプロセス置換の出番です。 言い換えると、プロセス置換はパイプでできることは何でもできますか? プロセス置換は何ができますが、パイプはできませんか?


6
/ dev / nullのような「ブラックホール」ディレクトリを作成するにはどうすればよいですか?
" /dev/null"ディレクトリ(または "ブラックホール"ディレクトリ)を作成して、そこに書き込まれたファイルが実際には書き込まれず、消えてしまうようにします。 大きな一時ファイルをディレクトリに書き込むアプリケーションがあります。私はファイルの名前を制御することはできず、これらのファイルの内容についてはあまり気にしません。これらのファイルを定期的に上書きするスクリプトを書くこともできますが、ファイルは非常に迅速に書き出されてディスクをいっぱいにします。もっと賢いものを探しています。実際には、書き込みがもう一方の端で破棄されているだけなのに、アプリケーションにこれらのファイルを書き込むと「考えて」もらいたいのです。 この古い関連スレッドも参照してください。

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