У меня есть сценарий, который я хочу иметь другое поведение в зависимости от того, был ли он запущен из терминала или (дважды) щелкнув значок в файловом менеджере. Я могу это сделать?
3 ответа
Вы можете использовать различия в статусе возврата от 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
Еще одна возможная проверка, посмотрите, что находится в /proc /$ PPID /cmdline
Это командная строка (с разделением NUL) процесса, который породил вас,
Если это у вас на вашем компьютере, когда вы сделали иконку, вы можете просто передать дополнительный параметр в командной строке, на который ссылается иконка, например:
/path/to/my/script fromgui arg2 arg3 .. argN
И просто проверить [[ "$1" == "fromgui" ]]
или подобный.