LINUX.ORG.RU

sh выполняет не то что bash

 ,


1

1

Имеется следующий скрипт. Если вводить все построчно в терминал, все работает, но если выполнить команду sh script.sh, но результат совсем другой.

PORT="/dev/ttyUSB0"
BAUD=9600

stty -F ${PORT} ${BAUD}

echo -ne "\0120" > ${PORT}
echo -ne "\0121" > ${PORT}

echo -ne "2" > ${PORT}

попробовал вместо COM порта сделать вывод в файл, в результате в нем получил '-ne «2»', хотя когда выполняю из терминала, то получаю содержание '2'.

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

Ubuntu 3.16.0-33-generic

Ответ на: комментарий от zolden

Так тут и дело не в баше, а в sh, он не воспринимает параметр -ne, который я хочу передать в echo

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

Используй не встроенную команду, а /bin/echo. И портабельно и -ne знает.

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

используй printf и не морочь голову своими глупостями.

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

Вместо лепки форкающегося костыля, как предлагает дурачок выше, — просто почитай про echo в man sh.

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

Нет, не знает, так же, как на некоторых системах, этого не знает и /bin/echo. -e — это башизм.

В данном случае проблема яйца выеденного не стоит. Что мешает использовать

echo -n "P"
echo -n "Q"
вместо восмиричной репрезентации?

Или

#!/bin/bash
вместо
#!/bin/sh
? С портабельностью ты ведь вряд ли заморачиваться будешь?

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

Ну так и запускай посредством bash.

#!/bin/bash
...
chmod +x script.sh
./script.sh
или
bash script.sh

А так, видимо, sh у тебя указывает не на bash, а на другой интерпретатор, посмотри сам:

ls -ls `which sh`

kostik87 ★★★★★
()

А всё потому, что в bash напихали кучу всяких дополнительных фишек. Можно использовать shell из FreeBSD. Он абсолютно POSIX.

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