2010-07-20 2 views
33

Не до середины через 3 часа скрипта сборки я помню, что хочу увидеть что-то в начале вывода после его завершения. На этом этапе я превысил количество строк в моем терминале, поэтому я не могу прокручивать вверх, чтобы увидеть его (или начало трудно найти). Конечно, я могу лучше хранить свой результат, но мне всегда было любопытно, если бы это было возможно.Вывод команды последней оболочки

В оболочке linux можно вернуть выходные данные последней команды. Я понимаю, что мог бы передать его или отправить вывод в файл, но мое требование - получить этот вывод после, эта команда была запущена.

Использование csh, но будет слышать о любой оболочке.

+0

bash http://stackoverflow.com/questions/5955577/bash-automatically-capture-output-of-last-executed-command-into-a-variable –

ответ

32

No. Выход программы никогда не проходит через руки раковины. Без перенаправления он переходит прямо в TTY. При перенаправлении он переходит прямо к любому файлу или трубе, к которому он был направлен. Оболочка не знает, что процесс отправил в stdout/stderr.

+0

Спасибо, это то, что я хотел знать – ack

1

Вы можете увидеть код возврата последней команды, по крайней мере, в bash, с $?.

Как далеко вперед, я не думаю, что вы можете.

0

сохранить выходные данные как переменную?

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

Он говорит в его вопрос: «Я понимаю, что мог бы передать его или отправить вывод в файл, но мое требование - получить этот вывод после выполнения команды». –

2

Как насчет замены. Например:

command1 
command2 
RESULT=`LASTCOMMAND` 
echo $RESULT

+0

backticks - более сложная часть. люди склонны использовать одинарные или двойные кавычки. – asgs

0

Мое вы можете использовать команду tee, чтобы поместить вывод в STDOUT, а также в файл, а затем использовать его.

3

Это может стать очень грязным с определенными командами, использующими адресацию курсора. Каков результат вашей сессии vim? Или немного более разумный пример: вы загружаете файл с помощью wget, и он показывает процентную полосу, идущую от 0% до 100%. Каков результат этого?

Я думаю, что вы в основном хотите распечатать что-либо между вашей текущей строкой и предыдущей подсказкой. Это не то, что перенаправление оболочки будет хорошим примером, это в основном то, что сделает терминал. Вы можете сделать это вручную, скопировав и вставив на экран, и, возможно, вы можете автоматизировать его с помощью команды exec. tmux может иметь что-то подобное, и вы можете делать странные вещи в режиме оболочки Emacs, но это довольно тяжелое решение. rxvt-юникода имеет perl extension ...

19

script(1) это именно то, что вам нужно:

script 
make 
exit 
vim typescript 

Программа script запустит новую оболочку и сохранить ввод и вывод в файл typescript. Когда вы закончите, просто закройте оболочку с помощью exit или ^D. Если вы предпочитаете не запускать новую оболочку, а просто запускаете свою сборку, вы можете использовать: script -c <command>.

+0

Это круто. Мне нравится, как вы можете использовать его для регистрации целой партии команд. – ack

0

Это функция вашего терминала. Вы должны сосредоточиться на создании установки, где вам не нужно ничего делать. Одним из возможных решений является запуск «экрана» в вашем сценарии входа (что не так просто для правильного выбора) при включенной регистрации.

8

Если запуск команды снова не изменит ничего, вы можете использовать !! для доступа к вершине стека истории, чтобы перезапустить последнюю команду. Выполнение этого в backticks позволит вам использовать результат.

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

Это работает, но это означает повторное выполнение команды. Если предыдущей командой был длительный поиск, вам придется подождать еще раз. – Melebius

0

Вы всегда можете запустить процесс в окне оболочки emacs. Он сохранит все.

1

Если вы ищете только код возврата последней выполненной команды, используйте echo $?.

Это обычно помогает, когда вы хотите найти, успешно ли выполнена ваша последняя команда, и вы также можете форматировать это в свой скрипт сборки для получения предупреждений о пропуске/сбое.

Смежные вопросы