Я хотел бы передать данные в интерактивную команду и получить вывод интерактивной команды в качестве ввода для другой команды.
Например, я хотел бы иметь возможность сделать что-то вроде следующего:
echo "Zaphod" | hello.sh | goodbye.sh
и иметь вывод:
ПОКА ПРИВЕТ Зафод
Вот мой первоначальный взгляд на это, но я что-то упускаю ;-) На самом деле я бы хотел, чтобы hello.sh выбирал из списка вещей.
привет.sh
echo Please supply your name
read NAME
echo "HELLO $NAME"
до свидания.sh
MSG=$*
if [ -z "$1" ]
then
MSG=$(cat /dev/stdin)
fi
echo "BYE $MSG"
РЕДАКТИРОВАТЬ: Под «выбрать из списка вещей», я думаю, я подразумеваю свой реальный вариант использования, который берет что-либо из стандартного вывода и позволяет мне выбрать один вариант и передать его на стандартный ввод чего-то еще... Например:
ls /tmp | select_from_list | xargs cat
позволит мне перечислить файлы в /tmp/, интерактивно выбрать один, а затем просмотреть содержимое файла.
Итак, мой скрипт "select_from_list" на самом деле выглядит так:
#!/bin/bash
prompt="Please select an option:"
options=( $* )
if [ -z "$1" ]
then
options=$(cat /dev/stdin)
fi
PS3="$prompt "
select opt in "${options[@]}" "Quit" ; do
if (( REPLY == 1 + ${#options[@]} )) ; then
exit
elif (( REPLY > 0 && REPLY <= ${#options[@]} )) ; then
break
else
echo "Invalid option. Try another one."
fi
done
echo $opt
(ls /tmp/ && cat) | select_from_list
. Пробовал и вbash
и вzsh
- person Brad Parks   schedule 11.12.2015hello.sh
подключен к каналу, а не к tty. Прочтите/dev/tty
или см. stackoverflow.com/a/1992967/1944784, как исчерпать стандартный ввод, а затем снова открыть его для чтения. - person 4ae1e1   schedule 11.12.2015