LINUX.ORG.RU
решено ФорумAdmin

sh или bash?

 , ,


0

2

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

Ответ: Проверяется скриптами checkbashisms (пакет devscripts) или shellcheck.

В данную секунду интересует скрипт:

for f in somedir/*
do
    echo $f
    ./a.out -Q"$f"
    wait $!
done

Особенно интересует строка wait $!. Вроде, в документации dash такого нет, но скрипт работает.

Ответ: Есть. Просто мануал не предназначен для поиска по ключевым словам. Его положено запоминать целиком.

Перемещено hobbit из general

★★★

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

POSIX Shell Command Language

Bash Features (документ устарел, но суть передаёт)

Особенно интересует строка wait $!. Вроде, в dash такого нет, но скрипт работает.

Есть. Это POSIX фича.

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

https://github.com/koalaman/shellcheck

Я предпочитаю использовать bash, потому что под sh в разных дистрибутивах понимаются разные вещи: в Дебианоподобных – это dash, в Редхатоподобных – это bash в режиме sh. А Баш он везде один и тот же, опять же сахар.

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

Открыл dash, и там такое есть.

«man dash» имелось в виду.

$! я в этом мануале не нашёл, поэтому спросил.

Внимательно перечитал – нашёл ! как ID фонового процесса, но про добавление $ не понять, если не знаешь заранее. И в отличии от man bash, нет примера wait $!.

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

но про добавление $ не понять

Но там же секция называется «Special Parameters», можно догадаться. В bash терминология аналогичная. Если придираться к таким вещам, то, будем честны — все эти UNIX-шеллы, по большей части, трудночитаемое говно, заточенное под простоту интерактивного ввода.

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

Но там же секция называется «Special Parameters», можно догадаться. В bash терминология аналогичная.

Об этом и говорю. Нужно заранее знать, что подразумевает под «special» автор данного мануала.

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

Нужно заранее знать, что подразумевает под «special» автор данного мануала.

Нужно знать, что подразумевается под «parameters», чтобы понимать, что нужен символ «$». А про это там всё же есть, хоть и мимоходом в виде примеров про позиционные параметры. Но руководство действительно могло бы быть чуть менее лаконичным.

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

Нужно заранее знать, что подразумевает под «special» автор данного мануала.

Нужно знать, что подразумевается под «parameters»

Да, так правильнее.

olegd ★★★
() автор топика