4

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

3 ответа3

4

Вы можете использовать различия в статусе возврата от 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
0

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

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

0

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

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

И просто проверить [[ "$1" == "fromgui" ]] или подобный.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .