[解決済み] 標準出力を変数に取り込み、コンソールに表示する。
2023-06-18 03:17:23
質問
いくつかの長時間実行するプロセスを呼び出すbashスクリプトを持っています。 処理上の理由から、これらの呼び出しの出力を変数に取り込みたいと考えています。 しかし、これらは長く実行されているプロセスであるため、私は rsync 呼び出しの出力をコンソールに表示するために リアルタイム で、事後ではなく、コンソールに表示されることを望みます。
この目的のために、私は が見つかった という方法がありますが、これはテキストを /dev/stderr に出力することに依存しています。 dev/stderr に出力するのは、あまり良い方法ではない気がします。
VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee /dev/stderr)
VAR2=$(rsync -r -t --out-format='%n%L' --delete -s /path/source1/ /path/target1 | tee /dev/stderr)
VAR3=$(rsync -r -t --out-format='%n%L' --delete -s /path/source2/ /path/target2 | tee /dev/stderr)
上の例では、rsyncを何度か呼び出しているので、処理されるファイル名を見たいのですが、最終的には、後で解析するので、やはり変数に出力してほしいのです。
これを達成するための「よりクリーンな」方法はありますか?
もし違いがあるとすれば、私はUbuntu 12.04、bash 4.2.24を使用しています。
どのように解決するのですか?
シェルの中で &1 を複製し(私の例では 5)、サブシェルで &5 を使用します(親シェルの標準出力(&1)に書き込むようにします)。
exec 5>&1
FF=$(echo aaa|tee >(cat - >&5))
echo $FF
aaaを2回表示します。1回目はサブシェルでechoされたためで、2回目は変数の値を表示します。
あなたのコードでは
exec 5>&1
VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee >(cat - >&5))
# use the value of VAR1
関連
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Bashでコマンドの前に環境変数を設定すると、パイプ内の2番目のコマンドで動作しない
-
[解決済み] Ansibleで新しいユーザーとパスワードを作成する
-
[解決済み] unset の使用と変数への空の設定
-
[解決済み] BASHでAWS S3 CLIを使用して標準出力にファイルをダンプするには?
-
[解決済み] Bashでコマンドライン引数を変更するには?
-
[解決済み] WindowsのバッチとLinuxのBashの両方で実行できるスクリプトは?
-
[解決済み] Bashの引数で引用符を維持するには?重複
-
[解決済み] シェルのワイルドカード文字展開を停止しますか?
-
[解決済み] Bashでforループを書くには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】標準誤差を変数に格納する方法
-
[解決済み] Makefileでシェルコマンドを使用する方法
-
[解決済み] Bashでファイルの内容を既存ファイルの末尾に追加する [重複]。
-
[解決済み] 指定された時間/日付まで眠る
-
[解決済み] ディレクトリ内のファイルに対して、ファイル名のみ(パスなし)をエコーします。
-
[解決済み] ファイルツリー図の作成に使用するツールについて【終了しました
-
[解決済み] bashのifブロックの中でboolean変数を評価する方法は?重複
-
[解決済み] 環境変数の指定とエコーを同じコマンドラインで実行できないのはなぜですか?
-
[解決済み] BashやShellスクリプトで関数の前方宣言を行うには?
-
[解決済み] DockerfileでDockerコンテナにBashのエイリアスを設定するにはどうしたらいいですか?