34

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

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

csh を使用しますが、任意のシェルについて聞くことができます。

4

11 に答える 11

33

いいえ。プログラムの出力がシェルの手を通過することはありません。リダイレクトがなければ、TTY に直接送信されます。リダイレクトを使用すると、リダイレクト先のファイルまたはパイプに直接移動します。シェルは、プロセスが stdout/stderr に送信したものを認識していません。

于 2010-07-20T02:40:41.820 に答える
19

script(1)まさにあなたが必要とするものです:

script
make
exit
vim typescript

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

于 2010-07-20T03:17:12.950 に答える
8

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

$> find . -iname fileInUnknownLocationInHierarchy.txt
./something/buried/deep/where/you/dont/want/to/retype/fileInUnknownLocationInHierarchy.txt
$> vim `!!`
于 2013-03-22T16:44:06.780 に答える
3

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

基本的に、現在の行と前のプロンプトの間にあるもののハードコピーが必要だと思います。これは、シェルリダイレクトが良い例になるようなものではなく、基本的には端末が行うことです。画面にコピーして貼り付けることで手動で行うことができます。また、 execコマンドを使用して自動化することもできます。tmuxにも似たようなものがあり、Emacsのシェルモードで奇妙なことをすることができますが、それはかなり重い解決策です。rxvt-unicodeにはperl拡張子があります…</p>

于 2010-07-20T03:15:22.220 に答える
2

代用を使ってみてはどうでしょうか。このような:

command1
command2
RESULT=`LASTCOMMAND`
echo $RESULT

于 2010-07-20T02:44:47.457 に答える
1

最後に実行されたコマンドの戻りコードだけを探している場合は、echo $?.

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

于 2013-10-08T17:27:45.203 に答える
1

最後のコマンドのリターン コードは、少なくとも bash では$?.

標準出力に関する限り、私はあなたができるとは思わない。

于 2010-07-20T02:42:55.577 に答える
0

これは端末の機能です。何もすることを覚えておく必要がないセットアップを作成することに集中する必要があります。考えられる解決策の 1 つは、ログを有効にしてログイン スクリプトで "screen" を起動することです (これを正しく行うのは簡単ではありません)。

于 2010-07-20T19:23:17.967 に答える
0

私は、tee コマンドを使用して、出力を STDOUT およびファイルに出力してから使用することができます。

于 2010-07-20T02:59:52.077 に答える
0

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

于 2013-05-30T20:01:28.830 に答える
0

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

bash: Output=$(ls); echo $Output
于 2010-07-20T02:43:10.397 に答える