LINUX.ORG.RU

Глюки bash'а?

 ,


0

1
$ cat test.sh
#!/bin/bash
i="-"
cat some_file | while read line
do
        i="$i-";
        echo $i;
done
echo $i

$ ./test.sh
--
---
----
-----
------
-

Переменная i при входе в цикл сохраняет свое значение и сбрасывает свое значение при выходе из него.
Баг? Фича? Что делать, чтобы значение сохранялось?

Это фича, из-за пайпа твой while исполнаетя в sub_SHELL

Что делать?

while ... do

done < $FILE

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 2)

пайп создает subshell для цикла

Убери cat some_file, и сделай после done < some_file

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

Если очень надо (например, употребляется не cat, а что-то более сложное, или надо пропустить ввод ещё через какой-нибудь фильтр), то можно употребить 'shopt -o lastpipe' - башизм, заставляющий bash вести себя как некоторые реализации ksh (для них это тоже не гарантируется).

ABW ★★★★★
()

в десятке.

Скоро этот тупой вопрос займёт первое место в рейтинге. А то вопрос «почему я ввожу пароль, а букв нет?» почему-то в последние три года задавать стали реже.

И да, ответ: потому что ты говнокодер, и тупо копипастишь всякое говно из интернетов. Тут субшелл не нужен.

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

Если очень надо (например, употребляется не cat

блжад! Временный файл для этого надо сделать. Ну или использовать перенаправление вида <(command).

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

потому что ты говнокодер

И чо?

Тут субшелл не нужен.

Дык ты напиши как надо а не плюйся словами бранными.

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

Временный файл для этого надо сделать.

Я и сделал. Но как-то это не очень элегантно.

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

Пробовал. И гуглить пробовал. Не помогло, как видишь.

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