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


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

Автор Тема: Как из bash-скрипта узнать, запущен ли он в терминале?  (Прочитано 3379 раз)

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

Оффлайн byte255

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Всем привет. Возможно ли узнать внутри шелл-скрипта, запущен ли он в терминале (при клике на файле .sh ubuntu обычно предлагает варианты: просмотреть, выполнить, выполнить в терминале)? Мне нужно, если пользователь выбрал "выполнить" выбросить окно (zenity) "Этот скрипт надо запускать в терминале". и прекратить его работу. Заранее спасибо.

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6293
    • Просмотр профиля
А не проще сразу в скрипте открывать терминал и выполнять в нём действия?

Например
xterm -e mc

Оффлайн byte255

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Понял вас. Все же хотелось бы узнать, возможно ли это?

Оффлайн kss

  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Для меня да, это проще. Но у нас тут полно народу, который хочет два раза кликнуть на иконке и получить желаемый результат. Мне неохота заморачиваться с пограммированием штуковины а-ля windows wizard надо просто сказать пользователю из скрипта: "Запусти меня в терминале"

Вы не поняли. Вариант с xterm Вам предлагают прописать в самом скрипте

Оффлайн byte255

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Не успел отредактировать =)

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

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Как вариант:
if ! ls -l /proc/$PPID/exe | grep -q gnome-terminal$; then
  gnome-terminal --command="$0 $*"
  exit 0
fi


Пользователь решил продолжить мысль 09 Сентября 2010, 16:18:00:
Только надо учесть, если gnome-terminal это симлинк на ченить еще, то возможно этот скрипт превратится в форк-бомбу  :buck2:
« Последнее редактирование: 09 Сентября 2010, 16:18:00 от Mam(O)n »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
http://theory.uwinnipeg.ca/localfiles/infofiles/bash/bashref_54.html

if [ -z "$PS1" ] ; then
  zenity --error "Меня надо запускать в терминале"
  exit
fi

Пользователь решил продолжить мысль 10 Сентября 2010, 12:54:54:
Как вариант:
if ! ls -l /proc/$PPID/exe | grep -q gnome-terminal$; then
  gnome-terminal --command="$0 $*"
  exit 0
fi

Упс, а я yakuake люблю...
« Последнее редактирование: 10 Сентября 2010, 12:54:54 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

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

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Не, не работает. Если запускать скрипт, то ни $PS1 ни i в $- не установлены.
(Нажмите, чтобы показать/скрыть)

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Ну, значит, надо просто проверять, есть ли в аргументах командной строки какой-нибудь параметр, и если не будет - ругаться.
Неважно, что этот параметр ни на что не влияет - ничего, не обломаются, напишут пару лишних буковок.

Автор, а что за задачу выполняет этот скрипт, что так важно видеть command-prompt?
« Последнее редактирование: 10 Сентября 2010, 14:48:03 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
http://www.linux.org.ru/forum/development/149787 — смотрите там последнее сообщение. У этого метода есть свои недостатки, но по-моему, пользоваться можно. Если там предлагают
Цитировать
Check if standard input is a terminal
то можно проверить и стандартный вывод — если уж какой-то умник переопределил всё, то кидайте ему Zenity и Ncurses на всякий случай.
« Последнее редактирование: 10 Сентября 2010, 16:25:11 от inkblack »
Делюсь знаниями, но их у меня мало!

 

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