いくつかのフィルタを使用して、すべての出力を特定のコマンドによって生成された端末に変換したいと思います。この目標をどのように達成できますか?
最も簡単な答えは、おそらく「パイプの使用」です。しかし、現在の構成性を強調した元のUnixアプローチから抜け出して実行されているコンテキストを見て、ターミナルに出力するのか、それとも別のものとして出力するのかによって異なる動作をするUnixツールが多すぎます。前者の場合、次に端末の機能は何ですか?コマンドはその機能を介して元の端末に出力されるかのように機能し、さらに端末出力を変換したいと思います。
答え1
それは私がしたことです。フィルタが正確に何を意味するのかわかりませんが、ログファイルで作業する方法を提供しますCommand 1 output:
。echo
#!/bin/bash
set -x
my_command() {
command1_output=$(command1)
echo "Command 1 output: $command1_output"
# Add more commands as needed
}
my_command >> my_logging_file 2>&1
時にはset -x
情報が多すぎます。tail -f my_logging_file
他の端末で実行してリアルタイムで視聴できます。
コメントの更新:tail
すぐに観察するために、ロギングと開始、パイプ接続を避けてください。
#!/bin/bash
set -x
my_command() {
command1_output=$(command1)
echo "Command 1 output: $command1_output"
# Add more commands as needed
}
my_command 2>&1 | tail -f /dev/stdin
関数がmy_command
実行され、そのstdout
合計がstderr
にパイプされますtail -f /dev/stdin
。
stdout と stderr を記録するのではなく、script
セッション全体を「記録」し、再び「再生」することが目的です。あなたはそれを使用することができます:
script my_session.log
# Your commands here
exit 0
その後、セッションを表示するために使用しますscriptreplay my_session.log
。
このexpect
コマンドは、対話型プログラムを自動化するために使用されるスクリプト言語です。 (つまり、ユーザー入力が必要なコマンドです。)
たとえば、次のようになります。
#!/usr/bin/expect
spawn my_command
expect "Input:" # Replace with expected prompt
send "input_value\r"
expect eof
これは特定のプロンプトを待ち、選択した入力を送信してmy_commandと自動的に対話します。