Как проверить, был ли сценарий запущен через командную строку или дважды щелкнул?

Я решил эту проблему:

sudo apt-get purge alsa-driver-linuxant https://help.ubuntu.com/community/SoundTroubleshootingПроцедура
1
задан 9 February 2016 в 21:33

3 ответа

Вы можете проверить, был ли сценарий оболочки запущен на терминале, анализируя вывод команды tty.

#! /bin/bash

if [[ $(tty) =~ "not a tty" ]]
then
    echo "Not running on terminal"

else
    echo "Running on terminal"
fi
1
ответ дан 23 May 2018 в 13:45
  • 1
    Этот тест можно упростить с помощью -t 0 вместо $(tty) =~ ..., IIRC. – muru 3 April 2018 в 13:34

Я проверил различия между средой при запуске скрипта из терминала и среды при запуске скрипта, дважды щелкнув его в файлах.

Когда вы запускаете скрипт, дважды щелкнув в «Файлы», $VTE_VERSION отключена, поэтому вы можете подключиться к ней, чтобы решить, заменить ли текущий экземпляр Bash интерактивным или нет.

То есть просто поместите это в конец вашего скрипта: [ ! d2]

#! /bin/bash
# ...
[ ! -z $VTE_VERSION ] && exec bash

Чтобы сделать эту работу также в случае запуска сценария из файла рабочего стола, измените строку Exec = рабочего стола на рабочем столе, например:

Exec=/path/to/script

Кому: [!d4 ]

Exec=sh -c '/path/to/script; exec bash'

Этот способ /path/to/script будет выполнен, а sh будет заменен Bash после завершения /path/to/script.

0
ответ дан 23 May 2018 в 13:45

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

# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
    notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
    exit 1
fi
0
ответ дан 23 May 2018 в 13:45

Другие вопросы по тегам:

Похожие вопросы: