Я хотел бы знать, как повторно использовать последний вывод из консоли, то есть:
pv-3:method Xavier$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/Library/Python/2.6/site-packages
pv-3:method Xavier$ cd **LASTOUTPUT**
shell
command-line
io-redirection
methodofaction
источник
источник
/dev/tty
, но должна быть возможность захватывать все, что отправленоstdout
илиstderr
, что может быть адекватным.Ответы:
Предполагая bash:
источник
`backtick-commands`
!cd $(dirname $(which python))
вот и я!Пока не упоминается, используйте переменную:
источник
cd $dir
Все остальные решения включают изменение вашего рабочего процесса или повторное выполнение команды, что может быть неприемлемо, если для запуска требуется много времени или оно не повторяется (например, при удалении файла - повторный запуск приводит к другому результату).
Итак, вот более сложная идея, если вам это нужно:
.bashrc
приглашение bash
У этого есть некоторые проблемы, так что это просто означает отправную точку. Например, выходной файл (
~/<pid>.out
) может стать очень большим и заполнить ваш диск. Кроме того, вся ваша оболочка может перестать работать, еслиtee
умрет.Его можно изменить так, чтобы он захватывал только выходные данные предыдущей команды, используя
preexec
иprecmd
ловушки в zsh, или их эмуляцию в bash, но здесь это сложнее описать.источник
tee
от сигналов (попробуйте нажатьCtrl+C
и запустить несколько команд). Используйтеscript
утилиту, у которой нет ни одной из этих проблем.Рабочий проект для традиционной оболочки:
Теперь мы можем поместить экран в файл. Необходимо sudo.
Кстати
screendump
: так называемая программа больше не работает для меня. Может быть, только для старых ядер. / dev / pts / N тоже не работает для меня. Может быть, вам нужен какой-нибудь дополнительный MKDEV в / dev - я немного помню о некоторых/dev/cuaN
, но могу ошибаться.Мы хотели бы передать вывод вместо использования screen.dump. Но так или иначе это не работает - иногда это ждет ENTER.
Захват не обычный текстовый файл с переводами строки, но с - например - 80x50 символов в одной последовательности.
Чтобы выбрать последние 2 строки, 1 для вывода команды и одну для строки подсказки, я возвращаю ее, выбираю 160 символов, снова возвращаюсь и 80.
На тот случай, если вы когда-нибудь задумывались, почему существует
rev
программа.Критика:
Первая диаграмма сделана с объяснением
источник
alias tee2tty='tee $(readlink /proc/$$/fd/1)'
Попробуй это:
источник
Итак, вот ответ:
Если вы работаете под X, выберите нужный вывод мышью, чтобы скопировать его, а затем нажмите среднюю кнопку мыши, чтобы вставить его.
Если вы работаете в текстовой консоли, вы можете сделать то же самое с gpm .
источник
(К сожалению, это не рабочий ответ, но все же что-то любопытное. Кто-то заинтересованный мог бы попытаться завершить реализацию функции, о которой я собираюсь рассказать вам.)
В
eshell
внутри Emacs, они хотели бы иметь такую возможность , но это не реализовано в полном виде (который, однако , отраженный в документации ).Например:
Видите ли, только выходные данные встроенных могут быть записаны в
$$
переменную.Но хорошо, немного elisp-программирования (см.
eshell-mark-output
Реализацию в «esh-mode.el»), и вы могли бы реализовать функцию, которая «помечает» последний вывод и возвращает его как результат функции; чтобы вы могли использовать эту функцию в запрашиваемой команде eshell - функции elisp можно использовать в командах eshell с обычным синтаксисом elisp, то есть в скобках, например так:источник
Если вы понимаете, что захотите повторно использовать вывод до того, как нажмете Enter, вы можете сохранить его в переменной: добавить
tmp=$(
в начале строки и)
в конце. (Это удаляет любую пустую строку в конце вывода команды и фактически удаляет любой заключительный символ новой строки; это редко имеет значение.)Если ваша оболочка ksh или zsh, вот полезная функция, которую вы можете использовать, чтобы сделать ее более автоматической. (Это не помогает в bash, поскольку требует, чтобы последняя команда конвейера выполнялась в родительской оболочке, что имеет место только в ksh (не pdksh) и zsh.)
Используйте это так:
источник
(основываясь на ответе 4485 )
Это много печатать, поэтому сделайте псевдоним:
Тогда просто позвони
cd $(python -c ... | tee2tty)
Это, конечно, требует, чтобы вы уже знали, что вы хотите сделать с выходными данными, но имеет преимущество вызова команды только один раз.
источник
сделает свое дело.
Подробнее читайте здесь: Подстановка команд .
источник
Есть лучшее решение:
Просто напечатайте
!!
после выполненной команды, и вы получите повторный вывод.Например
Оригинал:
https://askubuntu.com/questions/324423/how-to-access-the-last-return-value-in-bash
источник
!!
не повторяет результат последней команды, он повторно запускает последнюю команду. Еслиjot -r 1 0 1000
возвращает одно случайное число в диапазоне от 0 до 1000, то после однократного запуска этой команды и ее539
запуска!!
, скорее всего , будет выдано другое число.!!
также может быть нежелательным, если выполнение предыдущей команды занимает много времени или повторяет операцию, которая не должна повторяться (например, изменение файла).