[решено] Написание конвейерных команд

Объясните, пожалуйста, работу конвейеров. Делаю так:
a=test
echo $a #выводит test
echo $a | echo #выводит пустую строку

Но ведь система должа перенаправить вывод первой команды на вход второй? Почему этого не происходит?
Не у всех программ есть вход (stdin), на который можно перенаправлять. У echo - нет. Попробуйте echo блабла | cat.
which echo
echo: shell built-in command
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
which echo
echo: shell built-in command

Это неважно, /usr/bin/echo тоже не читает stdin)))
$ a=test; echo $a | xargs echo
test
Koluchka
Не у всех программ есть вход (stdin), на который можно перенаправлять. У echo - нет. Попробуйте echo блабла | cat.
Ясно, в чём дело. Не встречал об этом упоминаний.
А у команды rm есть? Изначально я пытался в переменную поместить список файлов на удаление, затем передать её команде rm, а она пишет, что аргумент на задан. Как тогда удалить несколько файлов по списку из переменной?
rm тоже не читает вход. Используйте xargs, как тут:

Aivar
$ a=test; echo $a | xargs echo
test
YuraRimskiy
Как тогда удалить несколько файлов по списку из переменной?
Этот пост прозрачен? Тогда еще раз:
$ touch loki kiol
$ ls
kiol  loki
$ a="loki kiol"
$ echo "$a" | xargs rm
$ ls
$

man xargs
YuraRimskiy
Изначально я пытался в переменную поместить список файлов на удаление, затем передать её команде rm, а она пишет, что аргумент на задан. Как тогда удалить несколько файлов по списку из переменной?
передать можно по разному, например так:
f="a.txt b.txt"
rm <<< echo $f
red
передать можно по разному, например так:
f="a.txt b.txt"
rm <<< echo $f
Что я делаю не так?
/tmp/test # touch a.txt b.txt
/tmp/test # ls
a.txt  b.txt
/tmp/test # f="a.txt b.txt"
/tmp/test # echo $f
a.txt b.txt
/tmp/test # rm <<< echo $f
rm: невозможно удалить 'a.txt b.txt': Нет такого файла или каталога
/tmp/test # ls
a.txt  b.txt
 
Зарегистрироваться или войдите чтобы оставить сообщение.