Вывод последней команды оболочки
До середины 3-х часовой сборки script, я помню, что я хочу увидеть что-то в начале выхода после его завершения. На этом этапе я превысил количество строк в моем терминале, поэтому я не могу прокручивать вверх, чтобы увидеть его (или начало трудно найти). Конечно, я могу лучше хранить свой вывод, но мне всегда было интересно, если бы это было возможно.
В оболочке linux можно вернуть результат последней команды. Я понимаю, что я мог бы передать его или отправить вывод в файл, но мое требование состоит в том, чтобы извлечь этот вывод после. Команда была запущена.
Использование csh, но будет слышать о любой оболочке.
Ответы
Ответ 1
Нет. Выход программы никогда не проходит через руки раковины. Без перенаправления он переходит прямо в TTY. При перенаправлении он переходит прямо к любому файлу или трубе, к которому он был направлен. Оболочка не знает, что процесс отправил в stdout/stderr.
Ответ 2
script(1)
- это именно то, что вам нужно:
script
make
exit
vim typescript
Программа script
запустит новую оболочку и сохранит ввод и вывод в файл typescript
. Когда вы закончите, просто закройте оболочку с помощью exit
или ^D
. Если вы предпочитаете не запускать новую оболочку, а просто запускаете свою сборку, вы можете использовать: script -c <command>
.
Ответ 3
Если запуск команды снова не изменит ничего, вы можете использовать!! для доступа к вершине стека истории, чтобы перезапустить последнюю команду. Выполнение этого в backticks позволит вам использовать результат.
$> find . -iname fileInUnknownLocationInHierarchy.txt
./something/buried/deep/where/you/dont/want/to/retype/fileInUnknownLocationInHierarchy.txt
$> vim `!!`
Ответ 4
Это может стать очень грязным с некоторыми командами, использующими адресацию курсора. Какой результат вашей сессии vim? Или немного более разумный пример: вы загружаете файл с помощью wget, и он показывает процентную полосу, идущую от 0% до 100%. Каков результат этого?
Я думаю, вы в основном хотите распечатать что-нибудь между вашей текущей строкой и предыдущей подсказкой. Это не то, что перенаправление оболочки было бы хорошим примером того, что в принципе что-то сделает терминал. Вы можете сделать это вручную, скопировав и вставив на экран, и, возможно, вы можете автоматизировать его с помощью exec. tmux может иметь что-то подобное, и вы можете делать странные вещи в режиме оболочки Emacs, но это довольно тяжелое решение, rxvt-unicode имеет расширение perl...
Ответ 5
Как использовать замену. Как это:
command1
command2
RESULT=`LASTCOMMAND`
echo $RESULT
Ответ 6
Вы можете увидеть код возврата последней команды, по крайней мере, в bash, с $?
.
Насколько я знаю, я не думаю, что вы можете.
Ответ 7
Если вы ищете только код возврата последней выполненной команды, используйте echo $?
.
Это обычно помогает, когда вы хотите найти, успешно ли выполнялась ваша последняя команда, и вы также можете форматировать это в своей сборке script для оповещений о пропуске/сбое.
Ответ 8
сохранить результат как переменную?
bash: Output=$(ls); echo $Output
Ответ 9
Могу ли вы использовать команду tee для вывода вывода в STDOUT, а также в файл, а затем использовать его.
Ответ 10
Это функция вашего терминала. Вы должны сосредоточиться на создании установки, где вам не нужно ничего делать. Одним из возможных решений является запуск "экрана" в вашем логине script (что не так просто сделать правильно) при включенной регистрации.
Ответ 11
Вы всегда можете запустить процесс в окне оболочки emacs. Он сохранит все.