LINUX.ORG.RU

stdin в функции bash


0

1

Есть функция на bash которой в stdin передается текст

$ cat ./test.sh 
#!/bin/bash


function xxx()
{
        echo "xxx()";
}

echo "wow" | xxx;
$ ./test.sh 
xxx()

Вопрос: как вывести этот текст?

★★★★
#!/bin/bash

xxx ()
{
  echo "xxx($1)"
}

if [ -z $1 ]; then
  xxx "wow"
else
  xxx "$1"
fi
[brain@ThinkPad-X230 ~]$ ./1.sh
xxx(wow)
[brain@ThinkPad-X230 ~]$ ./1.sh test
xxx(test)

Если я тебя правильно понял

i_gnatenko_brain ★★★★
()
Последнее исправление: i_gnatenko_brain (всего исправлений: 1)
Ответ на: комментарий от i_gnatenko_brain

нет не правильно.

функции xxx() я передаю «wow», как внутри функции поймать это «wow»?

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

Ну тогда так

#!/bin/bash

xxx ()
{
  echo "xxx($@)";
}

if [[ -z "$@" ]]; then
  echo "wow" | { read text; xxx "$text"; }
else
  xxx "$@";
fi
[brain@ThinkPad-X230 ~]$ ./1.sh Test else
xxx(Test else)
[brain@ThinkPad-X230 ~]$ ./1.sh
xxx(wow)
i_gnatenko_brain ★★★★
()
Последнее исправление: i_gnatenko_brain (всего исправлений: 1)
Ответ на: Ну тогда так от i_gnatenko_brain

я туплю, конечно read, спасибо

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

теперь другая проблема:

$ cat ./test.sh 
#!/bin/bash

function xxx()
{
        zzz=$(cat);
#       read -r zzz;

        echo "xxx(): ${zzz}";
}

echo "wow" | xxx;

xxx;

при втором вызове xxx идет залипание на чтении из stdin, как понять что читать нечего?

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

при втором вызове xxx идет залипание на чтении из stdin, как понять что читать нечего?

xxx < /dev/null

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

вызов менять нельзя, нужно понять это внутри функции

Никак. xxx в этом случае получит тот stdin, который был у test.sh

Вызывай тогда test.sh как test.sh < /dev/null

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

И вообще, хватит задавать вопросы, ответ на которые находится в мане. Твои вопрос говорит, что ты не понимаешь принципов программирования на sh. Неделя тупняка в dev на ЛОРе?

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

Этот момент я и правда не знал:

$ cat test.sh 
#!/bin/bash

function xxx()
{
        read B;
        echo "B: ${B}";
}

read A;
echo "A: ${A}";

echo "wow" | xxx;

xxx;

Судя по выводу видно что stdin для фунции берется либо из stdin скрипта либо локально затеняется:

$ echo -e "X\nY" | ./test.sh 
A: X
B: wow
B: Y
quest ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.