как запросить пользователя из скрипта, запущенного с помощью xargs

Я использую xargs для заполнения аргументов сценария, в котором я хочу остановить сценарий, ожидая ввода пользователя. Что-то типа:

echo a b c | xargs bash -c 'for a in "$@"; do echo $a; read; done'

но read игнорируется. Кажется, что второй скрипт тоже пытается получить данные из канала? Я пробовал xargs -p, но лучше не стало.


person drevicko    schedule 19.04.2012    source источник


Ответы (1)


Если опция -a указана для xargs, аргументы будут считаны из файла, а не из стандартного ввода. Вы можете использовать подстановку процесса в bash с синтаксисом <( ... ) для создания файла на лету.

xargs -a <( echo A B C ) bash -c 'for x in "$@"; do echo $x; read; done'

Обратите внимание, что здесь$@пропускается первый аргумент (в данном случае «A»). Это связано с тем, что bash -c помещает «A» в $0 (которое обычно принимает имя файла сценария), а $@ предоставляет $1, $2 и т. д. (в данном случае «B» и «C»).

person nosid    schedule 19.04.2012
comment
замечательный! Спасибо (: Интересное примечание: здесь $@ ловит 'b', а затем 'c'. 'a' хранится в $0, 'b' в $1 и т. д.. - person drevicko; 19.04.2012