Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Команда bash не выполняется в shell. Чем заменить?  (Прочитано 4609 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Axa-Ru

  • Гость
Ok.

Разделим задачу. Оставим определение оболочки до лучших времен.

Установим оболочку в которой выражение, приведенное ТС работает.

akhromov@x200s:~$ chsh
Password:
Changing the login shell for akhromov
Enter the new value, or press ENTER for the default
Login Shell [/bin/dash]: /bin/bash
akhromov@x200s:~$

Теперь выражение будет выполняться
akhromov@x200s:~$ IFC=`ifconfig | grep eth`
akhromov@x200s:~$ echo "${IFC:0:4}"
eth0
akhromov@x200s:~$

Оффлайн assistent

  • Автор темы
  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
Итак, отвечаю по-порядку. Стоит Ubuntu 10.04. При выполнении скрипта через bash script_name все нормально, при sh script_name - Bad substitution
To Axa-Ru:
Вывод команды echo &0  в bash:
dimitry@dimitry-desktop:~$ echo &0
[1] 3334

0: command not found
[1]+  Done                    echo

В sh:
dimitry@dimitry-desktop:~$ sh
$ echo $0
sh

To Mangust:
dimitry@dimitry-desktop:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2010-05-01 19:02 /bin/sh -> dash
dimitry@dimitry-desktop:~$ set | grep _VERSION
BASH_VERSION='4.1.5(1)-release'

Отсюда вывод: в Ubuntu под sh подразумевается dash
Так что можно перефразировать - в bash все в порядке, проблема в dash

« Последнее редактирование: 14 Июня 2010, 15:22:43 от assistent »
Foobnix - наше всё.

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Цитировать
Вывод команды echo &0  в bash:
...
Почему ты эту комманду в баше ввёл неправильно, а в sh правильно? Это что дескриминация различных шелов?

echo &0 это запустить команду echo в фоне, а потом запустить команду 0, об отстутсвии которой тебя и предупредили.

Да в убунте как и в дебиане по умолчанию /bin/sh это симлинк на dash.

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Axa-Ru , то что, вы привели, и есть проблема (в отличие от конкретного ${var:x:y}). Когда попадаешь в реальную систему (удаленный доступ к BSD или Solaris, к примеру), прежде всего надо определить:

1. В какой шелл по умолчанию находитесь.

2. Какие шелл доступны.

3. Можно ли сменить интерактивную шелл по умолчанию.

4. Что есть /bin/sh.

Ну а потом все остальное. Просто сменить оболочку - не выход, если нужно, ну, допустим, понять, что делается в разных rc-скриптах. В любом случае вопрос был по программированию в оболочке - как команду bash заменить командой shell.

Правильный ответ - никак, потому как "unix shell" не существует. Есть всего лишь многочисленные реализации sh с разными возможностями. И надо понять - где, что и как.

ЗЫ Все-таки нужно различать интерактивное использование и скрипты. И даже различать скрипты для себя, для обучения и для реального использования многими людьми или в разных системах.

ЗЫЫ Чисто личное мнение - для чуть более/менее сложных задач обработки строк не надо использовать shell. В данном конкретном случае я бы использовал

ifconfig | perl -lne '/^(eth\d+)/ && print $1'
Можно было бы использовать perl-вариант awk-решения, которое было приведено, но я не доверяю автоматическому разделению на поля по пробелам (хотя в данном конкретном случае это неважно).
« Последнее редактирование: 14 Июня 2010, 16:59:27 от Мангуст »

Оффлайн assistent

  • Автор темы
  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
Цитировать
Вывод команды echo &0  в bash:
...
Почему ты эту комманду в баше ввёл неправильно, а в sh правильно? Это что дескриминация различных шелов?

echo &0 это запустить команду echo в фоне, а потом запустить команду 0, об отстутсвии которой тебя и предупредили.

Да в убунте как и в дебиане по умолчанию /bin/sh это симлинк на dash.

Дело в том, что если я пробую запустить команду bash так же, как выше я показал запуск sh, т.е.:
dimitry@dimitry-desktop:~$ bash
то я получаю
dimitry@dimitry-desktop:~$
и все.
 как видите, эффект нулевой, т.к. bash и так используется по умолчанию, что я и показал выше
Foobnix - наше всё.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
как видите, эффект нулевой
А че мы видим. Да ничего мы не видим.
mamon@mamon-desktop:~$ echo $0
sh
mamon@mamon-desktop:~$ bash
mamon@mamon-desktop:~$ echo $0
bash
Эффект?

(Нажмите, чтобы показать/скрыть)

Такчто, из того, что не поменялость приветствие делать выводов не стоит.

Оффлайн assistent

  • Автор темы
  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
To VestniK: Извиняюсь, имела место банальная очепятка  :2funny:
конечно же не echo &0, a echo $0
тогда в принципе у меня и без всякого предварительного bash выдает:
dimitry@dimitry-desktop:~$ echo $0
bash
Foobnix - наше всё.

Axa-Ru

  • Гость
TC, А что вам нужно?

Я что то потерял нить...

Оффлайн assistent

  • Автор темы
  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
TC, А что вам нужно?

Я что то потерял нить...


Да, в спорах гуру на отвлеченные темы немудрено. Нужно мне то, что указано в первом сообщении. Но как я понял, dash настолько минималистичен, что в нем просто нет этой возможности. Выход либо использовать bash, либо прибегнуть к помощи сторонних инструментов типа sed или awk
Foobnix - наше всё.

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Да, в спорах гуру на отвлеченные темы немудрено
да, это любимое их занятие ;)
а вообще я лично проблемы не вижу, чем вам так bash не угодил или те же sed и awk. Это не будет костылем ;)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Все варианты интерпретаров по сути некоторые программы с каким-то набором встроенных средств. Единственное требование в них - поддержка POSSIX. Никто не запрещает использовать минималистический набор некоторых утилит (программ) для решения своих задач.
Единственный вопрос. А зачем, если все занимает меньше 10 MB (а это по современным меркам крохи) ?
Ответ тут один. Для поиска приключений.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Допустим, на (da)sh, без привлечения сторонних утилит больше, чем было в изначальном примере:
#!/bin/sh
s() {
  echo $1
}
IFC=`ifconfig | grep eth`
echo $(s $IFC)

 

Страница сгенерирована за 0.028 секунд. Запросов: 25.