LINUX.ORG.RU

Получение аргумента команды внутри последовательности команд

 


0

2

Приведу пример интерактивной сессии:

$ echo 'a'
$ echo 'b' 'c' && echo !:1 # здесь пытаюсь получить 'b' во второй раз

В результате же будет подставлен 'a' из предыдущей команды. Как получить 'b'?

UPD1: Вопрос возник из следующей задачи: есть две команды, основная принимает 2 аргумета, вспомогательная только второй аргумент из основной и должна выполнятся только при её успешном выполнении. Появилось желание написать однострочник, в котором пришлось бы только менять необходимые аргументы и не повторять работу по набору повторяющихся аргументов.

UPD2: dojob () (echo "$1" "$2" && echo "$1"); dojob 'b' 'c' вроде подходит под требования.

★★

Последнее исправление: Karthago (всего исправлений: 3)

Это же называется history expansion не просто так. Оно работает с записями в истории и команды туда попадают целиком после того как выполнились. Думаю, тут только так:

$ echo 'b' 'c'
$ [ $? -eq 0 ] && echo !:1

xaizek ★★★★★
()

В таком виде это невозможно.

«Подстановка из списка истории выполняется сразу же после считывания всей строки, прежде чем командный интерпретатор разобъет ее на слова.» © man bash

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Ясно, придётся тогда оборачивать элементарщину в скрипт.

Karthago ★★
() автор топика

А с помощью функции не получится? Что то вроде

dojob () (echo "$1" "$2" && echo !:1 "$1"); dojob 'b' 'c'

anonymous
()
Ответ на: комментарий от anonymous

В принципе вариант, только !:1 вроде как лишний.

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

Karthago ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.