端末出力を変換するには? [コピー]

端末出力を変換するには? [コピー]

いくつかのフィルタを使用して、すべての出力を特定のコマンドによって生成された端末に変換したいと思います。この目標をどのように達成できますか?

最も簡単な答えは、おそらく「パイプの使用」です。しかし、現在の構成性を強調した元の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と自動的に対話します。

関連情報