У меня есть следующий сценарий:
#!/bin/sh --
oathtool -b --totp XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | xclip -sel clip
echo "OTP Copied!"
sleep 2
oathtool
запускается, когда я иду в терминал и набираю что-то вроде ./VIP
или sh ./VIP
. Однако, когда я дважды щелкаю по файлу sh и выбираю «Выполнить в терминале», выполняются только команды echo
и sleep
, oathtool
ничего не делает.
Если Вы проверили опцию Ask каждый раз на Исполняемый Текстовый файл в Предпочтениях Наутилуса, то у Вас будет две опции Run in Terminal
и Run
, когда Вы (дважды) кудахчете на исполняемом файле мышью:
Вам нужно к выбору 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, нет никакого различия - то же поведение и предлагаемые решения работают в обеих ОС.