|
|
ru.unix- RU.UNIX ---------------------------------------------------------------------- From : Sergey Vlasov 2:5020/400 24 Jun 2007 20:44:15 To : Vasily Korytov Subject : Re: ksh scripting in zsh -------------------------------------------------------------------------------- On Sun, 24 Jun 2007 16:23:10 +0000 (UTC) Vasily Korytov wrote: > Есть следующий ksh-код: > PWGEN="apg -m 8 -x 8 -n 1" # генерилка паролей такая > PASS=$($PWGEN) > printf '%s\n' "$PASS" > > Он работает в ksh93, в ksh88 и даже в bash (хоть последний с ksh > совместим довольно слабо). > > А вот в zsh нет, выдаёт на второй строчке такое: > zsh: command not found: apg -m 8 -x 8 -n 1 > > Видимо, пытаясь вызвать бинарик "apg -m 8 -x 8 -n 1", а не "apg". В zsh есть опция SH_WORD_SPLIT, которая по умолчанию включена в режимах эмуляции sh и ksh, но выключена в режиме zsh: SH_WORD_SPLIT (-y) <K> <S> Causes field splitting to be performed on unquoted parameter expansions. Note that this option has nothing to do with word splitting. (See *Note Parameter Expansion::.) Вероятно, разработчики zsh решили, что от автоматического разбиения значений переменных по $IFS больше вреда, чем пользы. Если писать именно для zsh, можно явно указать ${=PWGEN}, чтобы код работал независимо от настроек, установленных пользователем. > Что немного удивляет, особенно в свете того, что Debian zsh прописан как > alternatives для (/usr)?/bin/ksh. Если zsh вызывается через симлинк с именем ksh, должен автоматически установиться режим emulate ksh, в котором опция SH_WORD_SPLIT включена. -- Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: Talk.Mail.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix/36729634b83d.html, оценка из 5, голосов 10
|