Как получить доступ к последнему возвращаемому значению в bash?

Протест!

notify-send "Message Title" "The message body is shown here" \ -i /home/andrei/Pictures/image.png -t 5000

настроен на рабочий стол в зависимости от того, является ли это:

Уведомление Unity-OSD или уведомление-демона Gnome

, которое отображает уведомление.

Цитата mhall119 / devportal / notify-osd - Ubuntu Wiki:

notify-osd ... заменяет место notification-daemon, а его представление пузырьков уведомлений отличается несколькими способами ...

В среде рабочего стола ubuntu 12.04, единственной (версии?) среде, цитируя manpage man notify-send

NAME notify-send - a program to send desktop notifications ... OPTIONS ... -t, --expire-time=TIME Specifies the timeout in milliseconds at which to expire the notification.

, однако, что противоречит ее использованию посредством уведомления-OSD, цитируя из Notification | Ubuntu App Developer (developer.ubuntu.com/resources/technologies/notification/), в частности раздел mhall119 / devportal / notify-osd - Ubuntu Wiki: :

...every bubble closes by itself after a timeout. This timeout is based on the length of the bubble’s text; Notify OSD does not use the expire_timeout parameter ...

-t 5000 может или не может вести себя как ожидаемый.

ref: Где я могу найти документацию для уведомления-osd?

Закладка: Где я могу найти документацию для уведомления-osd?

1
задан 25 July 2013 в 18:46

2 ответа

Для этого нет специальной переменной bash.

$? содержит код выхода последней команды (0 = успех,> 0 = код ошибки)

Вы может использовать вывод find с флагом -exec, например:

 find -name  '*.wsdl' -exec emacs {} \;

{} заменяется именем файла, найденным в find. Это выполнит команду для каждого найденного файла. Если вы хотите выполнить команду со всеми найденными файлами в качестве аргументов, используйте + в конце так:

  find -name '*.wsdl' -exec emacs {} +

Это откроет один экземпляр emacs со всеми найденными файлами .wsdl, открытыми в нем.

Более общее решение состоит в том, чтобы сохранить вывод в переменной:

result=$(find -name '*.wsdl')
emacs $result

Это работает со всеми командами, а не только с поиском. Хотя вы также можете использовать xargs:

  find -name '*.wsdl' | xargs emacs {}
54
ответ дан 24 May 2018 в 19:41

Вот быстрый хак, который должен делать то, что вам нужно, с минимальными нажатиями клавиш, если вы не возражаете, что последняя команда выполняется дважды.

Использовать обратный ход, ala:

`!!`

eg

$ find . -name HardToFind.txt some/crazy/path/to/HardToFind.txt $ vim `!!`

* edit: Я вижу, что вышеупомянутый связанный «возможно обманутый» вопрос также содержит этот ответ. все еще актуальным непосредственно для этого, так что оставляйте его, но извините за обман.

31
ответ дан 24 May 2018 в 19:41
  • 1
    Очень умно. Я думаю, что это должен быть принятый ответ, поскольку он решает наиболее распространенный случай, когда вы не знаете, что вам нужен вывод, пока вы не запустите команду. – Paul Ruane 19 April 2016 в 19:38
  • 2
    Я согласен, вот что я здесь искал. Выполнение чего-либо в предыдущей строке поражает мою цель, чтобы задним числом решить, что я хочу что-то сделать с последним возвращенным значением. (Оформить покупку, которую я нашел через git br | grep в моем случае) – Jack Casey 21 July 2016 в 03:51
  • 3
    Один из моих любимых, это! Думаю, я это делаю изо дня в день. – MetalGodwin 28 October 2016 в 14:20
  • 4
    Я думаю, что это очень умно, что вы можете это сделать, но не знаете, насколько это действительно полезно. Набирать !! гораздо проще, чем нажимать клавишу «вверх»? И тогда вы все равно сможете увидеть свою команду. Если запуск команды снова является приемлемым, я думаю, что просто нажимать вверх так же просто (и немного понятнее и прозрачнее), – Svend Hesselholt Henne Hansen 14 September 2017 в 11:32

Другие вопросы по тегам:

Похожие вопросы: