Определите, был ли запущен скрипт bash при нажатии значка или из терминала

У меня есть сценарий, в котором я хочу иметь другое поведение в зависимости от того, был ли он запущен с терминала или (двойным) нажатием значка в файловом менеджере. Я могу сделать это?

Вы можете использовать различия в статусе возврата из tty чтобы помочь вам.

 if tty -s; then # running in a terminal ... fi 

( tty -s запускает команду tty молча)

Статус выхода:

  • 0, если стандартный вход является терминалом
  • 1, если стандартный вход не является терминалом
  • 2, если заданы неверные аргументы
  • 3, если возникает ошибка записи

Или вы можете использовать встроенные тесты оболочки, чтобы проверить, имеют ли стандартный ввод / вывод от / до терминала:

 if [ -t 0 ]; # stdin then # running in a terminal ... fi 

Если это у вас на вашем собственном компьютере, если вы создали значок, вы можете просто передать дополнительный параметр в командной строке, указанную в этом значке, например:

 /path/to/my/script fromgui arg2 arg3 .. argN 

И просто тест [[ "$1" == "fromgui" ]] или simil.

Еще одна возможная проверка, посмотрите, что находится в / proc / $ PPID / cmdline

Это командная строка (NUL, ограниченная) процесса, который породил вас,

Interesting Posts
Давайте будем гением компьютера.