Как получить предпоследний аргумент из предыдущей команды bash? (в интерактивной оболочке bash)
Как я могу легко получить предпоследнее (предпоследнее) слово / аргумент из предыдущей команды в интерактивной оболочке bash? Я часто запускаю команды в фоновом режиме, и я хотел бы получить файл, который был указан до&
например,
% echo foo > /tmp/foo &
% cat !$
% &
В приведенном выше примере!$
дает последнее слово,&
, Но я хочу второй до последнего аргумента,/tmp/foo
Обратите внимание, что можно использовать обозначения слов с диапазоном, как!-1:3
, но это непрактично для команды с большим количеством слов, где не так быстро очевидно, сколько слов, например,
% (set -x; date; pwd; git status; git diff; git log | tail -30; date; args=--verbose time make test; date) >& /tmp/log/make.test.20150122-Thu-0834 &
% echo !-1:30
/tmp/log/make.test.20150122-Thu-0834
Приведенный выше пример работает, но вы должны посчитать и знать, что требуемое слово - это 30-е слово, которое отнимает много времени и подвержено ошибкам.
Есть ли простой способ получить второе (предпоследнее) слово?
(Обратите внимание, что этот вопрос относится к аргументам предыдущей команды в интерактивной оболочке, а не к аргументам, передаваемым в сценарий оболочки из командной строки, как здесь упоминаются некоторые ответы и комментарии.)