LINUX.ORG.RU

Ответ на: комментарий от selena-gomes

оба варианта работают.

ну если ты на Руси скажешь русскому мужику «fuck you», то ожидаемо получишь в рыло ☺

Я правда щас под cygwin

…в/на Украине тоже ☺

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

не, $() это gnu-bash. Но в других шеллах оно тоже _может_ работать.

Кстати вот так тоже работает(в баше)

$ l=`ls \`which ls\``; echo $l
/usr/bin/ls

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

ну что тут непонятного? В bash работает и то и другое.

В других шеллах(POSIX) `` работает, а вот $() может работает, а может не работает.

Русская фраза понимается любым русским человеком, английская — может понимается, может не понимается.

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

Кстати вот так тоже работает(в баше)

В шелле тоже работает, так что это не отличие никакое, там вопрос тупо в экранировании.

В других шеллах(POSIX) `` работает, а вот $() может работает, а может не работает.

Дык, я слыхал, что sh полностью posix-совместим.

selena-gomes
() автор топика

ныряй в сырцы старого бурного шела ,

затем посмотри какой синтаксис в rc ( подсказка - оба варианта отброшено)

в непосредственном использовании когда нет вложенных обращений разницы нет .

когда вложенные разименования_цитат то удобней $( c ) ибо зрительнее легче отличить открывающие от закрывающих - однако в обоих случаях гемор ибо лавина экранирований.

qulinxao ★★☆
()
Ответ на: комментарий от selena-gomes

В шелле тоже работает

работает. Но не в каждом. Bash --posix только разночтения обрабатывает по POSIX, новые фишки обрабатывает как gnu-bash.

Дык, я слыхал, что sh полностью posix-совместим.

да. Если в стандарте сказано «вода мокрая», то вода мокрая. А если в стандарте НЕ сказано «вода мокрая», то вода всё равно может быть мокрой. А может и не быть. AFAIK вот та хрень, что в роутерах (busybox), так не умеет. Ну и вообще много разных шеллов есть, я за все не стану говорить.

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

Ну и вообще много разных шеллов есть

Когда говорят шелл, без уточнения, какой именно, подразумевается sh, насколько я понимаю. А за все интерпретаторы естественно разговора не было, так сюда и интерпретатор питона можно приплести.

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

ща чаще bash (ибо и линукс и osX) sh совсем общий делитель .

т.е bash со всей его идеосинкразией , баш хорош - инструмент для настоящих .

qulinxao ★★☆
()
Ответ на: комментарий от selena-gomes

подразумевается sh, насколько я понимаю.

дык во многих дистрах /bin/sh это ссылка на bash, которая работает как bash --posix. Т.е. обычно все(почти) башизмы работают и в sh. Кроме тех, которые явно противоречат POSIX(а таких мало, и мне с ходу и не вспомнить).

Т.е. есть некий POSIX стандарт, а есть расширения(bash например). AFAIK `` в стандарте есть, а в баше тоже ессно есть, хоть и «старый стиль».

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

bash со всей его идеосинкразией

ну да. cat ‘{ls -tr|sed 10q} это куда как лучше, и понятнее. Упоролся?

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

Да я про то, что мой sh работает как баш, но выполняю то я в sh. По дефолту то там bash, но когда я печатаю sh, вроде начинается новая сессия. И хоткеи дефолтные, vi-like, перестают работать. Но в /usr/bin/ лежит сразу и sh.exe и bash.exe. может sh.exe — это тупо копия bash.exe, я хз.

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

Да я про то, что мой sh работает как баш, но выполняю то я в sh.

если bash запускать как sh, он работает примерно как bash --posix.

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. When invoked as an interactive login shell, or a non-interactive shell with the --login option, it first attempts to read and execute commands from /etc/profile and ~/.profile, in that order. The --noprofile option may be used to inhibit this behavior. When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files. When invoked as sh, bash enters posix mode after the startup files are read.

это тупо копия bash.exe, я хз.

я тем более хз, ибо в слаке это не работает.

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

Ты не мог ошибиться, может твой код — не башизм?

нет, не мог. Это лютый башизм, который не в каждом баше сработает. Это ассоциативный массив. Если такое и есть в других шеллах, то синтаксис наверняка другой. Хотя я тоже хз.

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

в слаке это не работает

У тебя в слаке оба интерпретатора? Если да, то проветь свою команду у себя в sh, пожалуйста, чтобы уже на сто процентов знать. А то какая то муть получается. Лежат 2 экзешника, diff показывает что они разные, по-логике sh.exe должен быть оригинальным шеллом.

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

У тебя в слаке оба интерпретатора?

у меня

$ ll /bin/sh
lrwxrwxrwx 1 root root 4 окт 16 21:47 /bin/sh -> bash*
а ставить Ъ-sh мне не хочется. Зачем?

Лежат 2 экзешника, diff показывает что они разные

diff'ать надо сырцы. А exe и не обязаны совпадать, зависит от опций сборки, компилятора, погоды на Марсе(да, собираем в несколько потоков, потому результат зависит от Марса. С т.з. diff)

ты лучше попробуй sh.exe --version


$ sh --version 
GNU bash, version 4.2.45(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ diff <(sh --version) <(bash --version)
/* ничего не написала */
emulek
()
Ответ на: комментарий от emulek

Да, ты прав, GNU Bash, version 4.1.10... Вот уроды, нагородили костылей, без стакана не разберешься, прям как в офтопике. А еще че-то лапочут за прототу unix-way. Ага, все просто, тока когда стакан есть :)

Спасибо за помощь.

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

Вот уроды, нагородили костылей, без стакана не разберешься

ну я пишу в скриптах всегда #!/bin/bash в первой строке. Но многие пишут #!/bin/sh, или вообще ничего не пишут. Для них нужны костыли. Можешь удалить sh.exe, если ты ВСЕГДА делаешь как я. ☺

И да, в маздае нормальных симлинков нет, потому приходится делать два exe'шника. Также в маздае как-то через задницу программа может прочитать своё имя, потому-то exe'шники разные. Раньше всё было хорошо, но вирусы этим пользовались, теперь там костыли сделали. Старые вирусы сломались, вирусы написали новые, но костыль так и остался. Страдай.

Мораль: если система кривая by design, то костыли её не исправляют, а только портят.

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

работает. А с `` не работает.

Всё работает, ты просто не осилил:

$ l=`ls \`which ls\``; echo $l
/usr/bin/ls@

И трёх, четырёх и тд кратную вложенность тоже можно.

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

а ставить Ъ-sh мне не хочется. Зачем?

Уже стоит, называется ash
Сессия в нём выглядит примерно так:

\u@\h:\w\$ declare -A A; A["xxx"]="yyy"; echo ${A["xxx"]}
Syntax error: Bad substitution
\u@\h:\w\$ l=`ls \`which ls\``; echo $l
/usr/bin/ls
\u@\h:\w\$ l=$(ls $(which ls)); echo $l
/usr/bin/ls
\u@\h:\w\$ ash --version
Illegal option --

Синтаксис PS1 оно, как видно, не распознаёт.

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

Обычно ash используется при загрузке Linux в однопользовательском режиме, в защищённом режиме или при загрузке дискетных версий Linux. Также с её помощью можно проверять скрипты на sh‐совместимость. В NetBSD в качестве /bin/sh работает именно ash.

В cygwin он тоже есть. А чем он отличается от Ъ-sh?

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

А чем он отличается от Ъ-sh?

Это и есть современная имплементация 'Ъ-sh'.

Отличай стандарт от имплементации.

Стандарт — это то, что описано в документе, например POSIX, а имплементация — это конкретная программа, более или менее соответствующая этому документу.

bash сделан для интерактивной работы и следует стандарту на sh только когда это удобно для практического применения

ash следан для легковесности и ставит своей целью соответствие стандарту. И, насколько я знаю, в busybox тоже ash интегрирован.

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

Уже стоит, называется ash

не. У меня на это не стоит. И это тоже не стоит.

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

А чем он отличается от Ъ-sh?

это и есть Ъ-sh, который мне лень ставить.

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

о кста для $( экранирование не нужно ибо понятна вложенность или всё таки экранировать обязательно?

хы.вот и важное отличие если.

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

о кста для $( экранирование не нужно ибо понятна вложенность или всё таки экранировать обязательно?

В чем отличие? (комментарий)

там шелл(ко всему прочему) культурней.

мне насрать на вашу религию. Мне проще и понятнее надо.

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

дык баше-умение нужно ибо оно «везде»

однако при прочих равных rc [будь оно везде ( ну поставить можно, однако чужие скрипты в массе на баше) ] - проще в понимании и использовании ибо позже было запроектированно с более полным пониманием , что нужно от шелла и оно не распухло - чем грешат все гну да и бсд тулзы - ибо добавление фич это энтропия.

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

чем грешат все гну да и бсд тулзы - ибо добавление фич это энтропия.

ну да. То-то ваш план9 никому даром не нужен.

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

чё ты в план9 вцепился то?

разочерования юности?

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

как и миникс ага.

однако когда я смотрю сырцы одной и той же утилиты во фряхе , в гну и в плане , то самым «преждевременно оптимизированным» вариантом оказывается .... - эволюция ага.

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

чё ты в план9 вцепился то?

я? Я недоумеваю, что ты в него вцепился?

есть полезное наблюдение - что если абстракция «всё есть файл» оказалась экономически провальной

с какого перепугу «провальной»?

однако когда я смотрю сырцы одной и той же утилиты во фряхе , в гну и в плане , то самым «преждевременно оптимизированным» вариантом оказывается .... - эволюция ага.

ты договаривай. Я сырцов плана9 не видел. Зачем оно мне?

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