次のスクリプトがあります。
#!/bin/sh --
oathtool -b --totp XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | xclip -sel clip
echo "OTP Copied!"
sleep 2
ターミナルに移動して./VIP
やsh ./VIP
のように入力すると、oathtool
が実行されます。ただし、shファイルをダブルクリックして[ターミナルで実行]を選択すると、echo
およびsleep
コマンドのみが実行され、oathtool
は何も実行しません。
Nautilusの環境設定 でExecutable Text FileのオプションAsk every timeをオンにすると、2つのオプションRun in Terminal
が表示されます。 Run
、マウスで実行可能ファイルを(ダブル)クリックすると:
あなたが望むものを達成するためにRun
を選択する必要があります。これは、Nautilus設定で[実行時に実行可能テキストファイルを開く]を設定した場合のデフォルトの動作でもあります。
これらの2つのオプション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
シェルに置き換えるため、ターミナルウィンドウは開いたままになり、ターミナルウィンドウを閉じるまでクリップボードがアクティブになります。もう1つのオプションは、sleep
時間を延長することです。これにより、ターミナルウィンドウがスリープしている間、クリップボードがアクティブになります。
Run
オプションまたは カスタムショートカット を使用している場合は、次のようにスクリプトを変更することをお勧めします。
#!/bin/sh --
oathtool -b --totp XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | xclip -sel clip \
&& notify-send "OTP Copied!"
したがって、notify-send
は、前のコマンドが&&
の意味であるtrueを返した場合にのみGUI環境内で通知を送信します。
上記の説明をUbuntu 16.04と19.04でテストしましたが、違いはありません。同じ動作と提案されたソリューションが両方のOSで機能しています。