LINUX.ORG.RU

как вернуть значение переменной из порожденного интерпретатора?

 


0

2
echo $PATH | while read -d : p; do
                     [ -e "$p"/"$name" ] && { name="$p"/"$name"; break; }
                 done

как известно в конвейерах все команды запускаются в порожденных интерпретаторах

возможно я не совсем правильно ищу файл

но все-таки такой вопрос возникал у меня раньше и на других примерах



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

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

echo "1:2:3:4:" | while read -d : n ; do  var=var:$n; done
кстати оказывается если в конце нету : (echo «1:2:3:4») - последняя 4 не обрабатывается

и как все-таки найти файл в $PATH?

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

тему не читал

и как все-таки найти файл в $PATH?

% readlink -f $(which www-browser) 
/usr/bin/lynx
entefeed ☆☆☆
()
Ответ на: комментарий от teod0r

ну надо было не просто s/:/\n/, надо было в переменную запихивать.

emulek
()

JSON или «питонсон»

anonymous
()

как вернуть значение переменной

#!/bin/bash

function f() {
    name="$1"
    echo $PATH | while read -d : p; do
        [ -e "$p"/"$name" ] && { echo "$p"/"$name"; break; }
    done
}

echo $(f 'bash')
anonymous
()
Ответ на: комментарий от emulek

done< <(echo $PATH)

done <<<$PATH

И зачем лишнюю команду исполнять? Не ты ли орал на людей за лишние команды cat?

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

в этом говнокоде

while read -d: p;do
    [ -e "$p/$name" ]&&{ name="$p/$name";break; }
done< <(echo $PATH)
вообще много лишнего. Да и сам он(код) не нужен.

мой вариант:

$ NAME=ls; find ${PATH//:/ } -name "$NAME" -executable

вроде-бы ТС этого хотел подсознательно.

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

проблема в сабшеле, здесь два варианта: или избегать сабшела или возвращать результат через файл или stdout, типа var=$(subshell)

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

избегать сабшела

если подумать: а зачем он здесь?

В любом случае, это временный файл, пусть даже это пайп. В простых случаях это оправданно, вроде

ps uax|grep 'чё-то'
но в сложных это, ИМХО, идиотизм.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.