LINUX.ORG.RU

bash и sh в rh 6

 , ,


0

2

Все наверное знают, что у редхата и клонов в отличие от бубунт sh это линк на bash. Я долго был уверен что и работают они одинаково ибо башизмы типа ${hash[key]} в sh работали без возражений.

Пока не встал на грабли.

while read line
do
  echo $line
done < <( cat /etc/passwd)

Этот код работает будучи запущен bash script.sh, но вываливается при sh script.sh.

Я даже не знаю как сформулировать вопрос... Скажем так: за какие грехи я потратил кучу времени на выяснения «ахули не работает», какие знания помогли бы мне этого избежать и зачем нужен sh который как бы bash, но не совсем?

Deleted

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

А в нормальном sh эта хрень ${hash[key]} точно не работает? Я вообще всегда думал, что sh, который симлинк на bash, ведет себя точно так же как и обычный sh, т. е. не поддерживает башизмы. Может в документации точнее сказано, как себя баш ведет, если запущен как sh?

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

А в нормальном sh эта хрень ${hash[key]} точно не работает?

Да, это расширение баша.

Может в документации точнее сказано, как себя баш ведет, если запущен как sh?

Вообще-то да. Но если сократить сказанное там до одной фразы, то это будет «мы не знаем как оно себя поведет в общем случае, убейте нас из жалости».

Deleted
()

А куда дели высокоинтеллектуальную дискуссию про мудаков и быдлокодеров? Там же все интеллигентно было, с поправкой на лор.

Deleted
()

bash(1):

If bash is invoked with the name sh, it tries to mimic the startup behavior  of  historical
versions  of sh as closely as possible, while conforming to  the POSIX standard as well. 

т.е. такой запуск эквивалентен запуску с --posix или установленной POSIXLY_CORRECT.
Синтаксис при этом он продолжает жрать свой, а вот поведение во многих случаях меняется: например, скрипт немедленно завершается при ненулевом возврате из source (.) или ненахождении этого файла, etc.

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

А куда дели высокоинтеллектуальную дискуссию про мудаков и быдлокодеров? Там же все интеллигентно было, с поправкой на лор.

Я подумал, что она не нужна. Не толксы. Бисти со мной согласился.

mandala ★★★★★
()

Как вываливается, что пишет?

sT331h0rs3 ★★★★★
()

Помимо того, что уже сказали про разницу между bash и sh ввиде симлинка на bash, хочу добавить, что такой упоротый метод написания скриптов (использование sh в sha-bang вместе с башизмами) ведёт к проблемам, и его стоит избегать.

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

Вот эти tries и as closely as possible создают очущение, что какие-то мерзавцы помешали положить туда нормальный sh, но героические ментейнеры сделали что могли.

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

использование sh в sha-bang вместе с башизмами

На самом деле всё ещё хуже. Скрипты игнорируют шебанг и вызывают друг друга делая sh script.sh. При этом все полны башизмами. И что самое печальное, в целом они работают.

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