web-dev-qa-db-ja.com

最後のシェルコマンドの出力

3時間のビルドスクリプトの途中までは、出力が終わった後、出力の最初に何かを見たいと思うことを覚えています。この時点で、端末の行数を超えたため、上にスクロールして表示することができません(または、最初を見つけるのが難しい)。もちろん、出力を保存する方がいい場合もありますが、これが可能かどうかは常に気になっていました。

Linuxシェルで、最後のコマンドの出力を返すことは可能ですか。パイプで送信したり、出力をファイルに送信したりできることに気づきましたが、私の要件は、その出力を取得することですafterコマンドが実行されました。

Cshを使用しますが、シェルについて聞きます。

34
ack

いいえ。プログラムの出力がシェルの手に渡ることはありません。リダイレクションなしで、それはTTYに直接行きます。リダイレクトを使用すると、リダイレクト先のファイルまたはパイプに直接移動します。シェルは、プロセスがstdout/stderrに送信したものを知りません。

33
Nicholas Knight

script(1)はまさに必要なものです。

script
make
exit
vim TypeScript

scriptプログラムは新しいシェルを開始し、入力と出力をTypeScriptファイルに保存します。完了したら、exitまたは^Dを使用してシェルを閉じます。新しいシェルを開始するのではなく、ビルドを実行するだけの場合は、script -c <command>を使用できます。

19
sarnold

コマンドを再度実行しても何も変わらない場合は、使用できます!!履歴スタックの最上部にアクセスして、最後のコマンドを再実行します。バックティックでこれを行うと、結果を使用できるようになります。

$> find . -iname fileInUnknownLocationInHierarchy.txt
./something/buried/deep/where/you/dont/want/to/retype/fileInUnknownLocationInHierarchy.txt
$> vim `!!`
8
David Woods

これは、カーソルアドレス指定を使用する特定のコマンドで非常に複雑になる可能性があります。 vimセッションの出力は何ですか?または、もう少し健全な例:wgetを使用してファイルをダウンロードすると、パーセンテージバーが0%から100%に表示されます。その出力は何ですか?

基本的には、現在の行と前のプロンプトの間のすべてのハードコピーが必要だと思います。これはシェルのリダイレクトが良い例となるものではなく、基本的に端末が行うことです。画面にコピーして貼り付けることで手動で行うことができます。おそらく exec コマンドで自動化できます。 tmux も同様の可能性があり、Emacsのシェルモードで奇妙なことを実行できますが、これはかなり重いソリューションです。 rxvt-unicodeには Perl拡張子 …があります。

3
mhd

置換の使用についてはどうですか。このような:

command1
command2
RESULT=`LASTCOMMAND`
echo $RESULT
2
NawaMan

$?を使用すると、少なくともbashでは最後のコマンドの戻りコードを確認できます。

Stdoutが遠くまで行くと、私はあなたができるとは思いません。

1
J. Polfer

最後に実行されたコマンドの戻りコードのみを探している場合は、echo $?を使用します。

これは通常、最後のコマンドが正常に実行されたかどうかを確認したい場合に役立ち、成功/失敗アラートのビルドスクリプトに組み込むこともできます。

1
jnmistry

出力を変数として保存しますか?

bash: Output=$(ls); echo $Output
0
Anycorn

これはあなたの端末の機能です。何もする必要がない設定を作成することに集中する必要があります。可能な解決策の1つは、ログを有効にして、ログインスクリプトで「画面」を起動することです(これはそれほど簡単にはできません)。

0
Mark Wagner

Emacsシェルウィンドウ内でいつでもプロセスを実行できます。それはすべてを保持します。

0
Bruce Barnett

Teeコマンドを使用して、出力をSTDOUTだけでなくファイルにも保存して使用できます。

0
Raghuram