いくつかの計算を実行するために、より大きなアプリケーションから呼び出される特定のLinux実行可能ファイルがあります。計算の実行方法を変更したいので、最初に実行可能ファイルがどのように呼び出され、パラメーターとデータがどのように転送されるかを理解する必要があります。
したがって、この実行可能ファイルが呼び出された場合は、コマンドラインパラメータstdinとstdoutを監視したいと思います。実行可能ファイルの通常の動作が妨げられることはありません。
それを行う簡単な方法はありますか?
更新:
次のスクリプトを使用してすべてのデータを取得するシェルスクリプトプレースホルダーのアイデアを試しました:
#!/bin/bash
export LOGFILE=/tmp/logname
echo `env` > $LOGFILE-env
echo "[email protected]" >> $LOGFILE-arguments
tee -a $LOGFILE-stdin | /path/to/real/executable 2>&1 | tee -a $LOGFILE-stdout
これはテスト入力には問題なく機能しますが、実際に呼び出された場合はハングします。おそらく、私が思っていたよりもさらに多くのことが起こっているでしょう。
承認された回答:
オプション1は、呼び出し元のアプリのソースコードを変更し、tee
を挿入することです。 出力パイプラインに追加して、その段階で確認するために出力のコピーを取得します。
オプション2は、問題の実行可能ファイルの周りにラッパースクリプトを作成することです。 stdinと引数を実際のアプリに渡し、出力を確認できる場所にティーで送信し、アプリが数行で作成するのと同じように吐き出します。特別な場所に配置し、その場所をPATH変数の前に追加してから、アプリケーションを実行します。
#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output