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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: sh и gedit проблема написания скрипта  (Прочитано 1001 раз)

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

Оффлайн fshlik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
sh и gedit проблема написания скрипта
« : 01 Декабря 2012, 11:55:51 »
Доброго времени суток)
***
Появилась необходимость написания небольшого shell-скрипта управления COM-портом в ОС Ubuntu.
Изучив лит-ру научился это делать в терминале, но вот проблема появилась:
по отдельности команда echo в терминале отрабатывается, а вот при написании её в gedit, перестаёт работать так как надо:

посылаю hex число 7 и на COM-порт выводится то что надо 1 байт 7.

root@root:~$ echo -e -n "\x7" >/dev/ttyUSB0

Теперь пишу com.sh скрипт:

#!/bin/sh
clear
echo -e -n "\x7" >/dev/ttyUSB0


и на COM-порт передается очередь разных байтов, похожих как будто-то все символы строки передаются.
Пробовал писать вот так и это лучшее что я смог добиться:

#!/bin/sh
clear
echo -n 7 >/dev/ttyUSB0


на COM-порт передается 7 в ASCII коде, а не в чистом hex виде, т.е. байт уже 1, но не тот который нужен.
Изучал документацию по gedit, echo, sh, но решения для себя там не нашел.
Мои предположения по решению этой задачи: надо как-то указать gedit  отключить ASCII и воспринимать hex число без изменения его.

Буду благодарен за любые советы, извините если чего-то простого не понимаю может-быть :-[ 


 


Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: sh и gedit проблема написания скрипта
« Ответ #1 : 01 Декабря 2012, 12:16:33 »
Код: (bash) [Выделить]
$ cat test.sh
#!/bin/bash

echo -en '\x07'

$ ./test.sh | od -h
0000000 0007
0000001

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: sh и gedit проблема написания скрипта
« Ответ #2 : 01 Декабря 2012, 14:27:27 »
fshlik,
echo и некоторые другие команды обычно встраивают в shell, чтобы скрипты выполнялись быстрее за счёт отсутствия необходимомсти вызова внешних программ.
$ type echo
echo is a shell builtin
В консоли ваша команда выполняется через bash, а в скрипте вы явным образом вызываете sh, который в убунточке слинкован на dash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 авг.  15 14:41 /bin/sh -> dash
Это было сделано для ускорения системы, dash действительно заметно менее ресурсоёмок. Однако, не поддерживает специфично башевские фишки, вроде массивов, и отличается поведением встроенных команд.
https://wiki.ubuntu.com/DashAsBinSh
Итак:
$ sh -c 'echo -e -n "\x7"'|hexdump -C
00000000  2d 65 20 2d 6e 20 5c 78  37 0a                    |-e -n \x7.|
0000000a
$ bash -c 'echo -e -n "\x7"'|hexdump -C
00000000  07                                                |.|
00000001
Для уяснения разницы в вашем случае сравните описание echo в man bash и man dash.

Для универсальности попробуйте перейти с echo на printf.
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Оффлайн fshlik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: sh и gedit проблема написания скрипта
« Ответ #3 : 01 Декабря 2012, 17:31:28 »
Помогло)) Спасибо за помощь и объяснения :)

 

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