Скрипт оболочки не запускает какую-либо команду при запуске из GUI

У меня есть следующий сценарий:

#!/bin/sh --
oathtool -b --totp XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | xclip -sel clip
echo "OTP Copied!"
sleep 2

oathtool запускается, когда я иду в терминал и набираю что-то вроде ./VIP или sh ./VIP. Однако, когда я дважды щелкаю по файлу sh и выбираю «Выполнить в терминале», выполняются только команды echo и sleep, oathtool ничего не делает.

2
задан 4 August 2019 в 11:51

1 ответ

Если Вы проверили опцию Ask каждый раз на Исполняемый Текстовый файл в Предпочтениях Наутилуса, то у Вас будет две опции Run in Terminal и Run, когда Вы (дважды) кудахчете на исполняемом файле мышью:

enter image description here

Вам нужно к выбору Run достигнуть того, что Вы хотите. Это - также поведение по умолчанию при установке исполнимых текстовых файлов Выполнения, когда они открыты в Предпочтениях Наутилуса.

Эти две опции Run in Terminal и Run имейте другое поведение, но к сожалению я не сделал нашел любую дополнительную документацию. Вероятно, первый создает временную среду, которая уничтожена, когда терминал закрывается. Мы можем доказать это путем добавления exec sh в нижней части Вашего сценария:

#!/bin/sh --
oathtool -b --totp XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | xclip -sel clip
echo "OTP Copied!"
sleep 2
exec sh

Команда exec sh заменит текущую оболочку (Вашего сценария) новым sh оболочка, таким образом окно терминала будет сохранено открытым, и Ваш буфер обмена будет активен, пока Вы не будете, закрывают окно терминала. Другая опция состоит в том, чтобы расшириться sleep время, затем Ваш буфер обмена будет активен, в то время как окно терминала спит.

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

#!/bin/sh --
oathtool -b --totp XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | xclip -sel clip \
&& notify-send "OTP Copied!"

Таким образом notify-send отправит Вам уведомление в среде GUI только, когда предыдущая команда возвращает true, который является значением &&.


Я протестировал описанный выше в Ubuntu 16.04 и 19.04, нет никакого различия - то же поведение и предлагаемые решения работают в обеих ОС.

2
ответ дан 2 December 2019 в 03:27

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

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