Paul Zakharov (paul_z) wrote in ru_shell,
Paul Zakharov
paul_z
ru_shell

Passing arguments by pipe

Извините, пожалуйста.

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

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

temp.ksh:

#!/bin/ksh

echo "$#"

exit

Смотрим
]$ ./temp.ksh
0
]$ ./temp.ksh 3
1
]$ ./temp.ksh 3 | ./temp.ksh
0

Хм...
И даже если вот так:

]$ echo 3
3
]$ echo 3 | ./temp.ksh
0

Хм....
После некоторых размышлений появилась мысль, что может быть даже это и логично (типа каждый скрипт запускает свой новый шелл и т.п.).
Но все равно остались вопросы:
А логично ли все-таки?
Все-таки как же это сделать-то тогда?

//В последним вопросе под "это" имелось в виду, конечно не вариант в примере, а нечто более общее. Есть некий скрипт, который производит некий оутпут, и хотелось этот оутпут через пайп переправить второму скрипту.
Оно конечно можно было бы это все сделать и по-другому, ну, к примеру, через какой-нибудь темпорари файл... но а вот через пайп, что? Никак нельзя?

Заранее спасибо, и извините если вопрос, как всегда, слишком ламерский.
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

  • 2 comments

Deleted comment

>не путайте количество аргументов и stdin

Ага... Да, есть такое дело. Ступил... :-(

Но... просто через аргументы как-то хорошо и красиво получалост, а через stdin как-то не так получается, не красиво...

Вот например, не понятно как отловить, если скрипт запущен сам по себе...
То бишь вот если взять ваш вариант с while, то на
echo 3 | ./test.ksh
все работает отлично.
Но на просто ./test.ksh он естественно останавливается и терпеливо ждет пока ему что-нибудь дадут. И как это отловить не очень понятно...

Но в любом случае, большое спасибо. :-)

Deleted comment

Ага, спасибо...

Более-менее понял... думаю read -t в качестве базового варианта вполне сойдет, ну а если надо будет что покруче сделать попробую покурить маны.