いくつかの変更を含むかなり複雑なコマンドを実行するのに役立つようにする Bash スクリプトがあります。
コマンドを実行するために端末を強制的に実行するソリューションを見つけましたが、それには興味がありません。私が望むのは、Nautilusにスペースを作成してEnterキーを押すと(実行中のソフトウェアで実行されるように)、「ターミナルでこのプログラムを実行してください」という通知がスムーズにポップアップされることです。
コマンドを知っているようにポップアップを発生させることができますが、Bashスクリプトが端末内で実行されているかどうかはわかりません。いつも考えているようです。可能ですか?
ベストアンサー1
man bash
下から条件式:
-t fd
True if file descriptor fd is open and refers to a terminal.
fd 1が標準出力であると仮定すると、if [ -t 1 ]; then
これがうまくいくでしょう。これ高度なシェルスクリプトガイドこのようにステートメントを使用するとフェイルオーバーが-t
行われるため、ssh
テスト(標準出力ではなく標準入力を使用)は次のようにする必要があります。
if [[ -t 0 || -p /dev/stdin ]]
-p
ファイルが存在し、名前付きパイプであるかどうかをテストします。 しかし、、経験に照らしてみると、これが私にとっては本当ではないことがわかりました。-p /dev/stdin
通常のターミナルとsshセッションの両方が失敗しますが、(if [ -t 0 ]
または-t 1
)はどちらの場合も機能します(このセクションの質問については、以下のGillesのコメントも参照してください)。高度なシェルスクリプトガイド)。
主な問題がそのコンテキストに適した方法で呼び出しスクリプトを実行したい特別なコンテキストである場合は、ラッパーとカスタム変数を使用してこれらの技術的詳細をすべて回避し、問題を減らすことができます。
!#/bin/bash
export SPECIAL_CONTEXT=1
/path/to/real/script.sh
この名前または別の名前を呼び出してダブルlive_script.sh
クリックします。もちろん、コマンドライン引数を使用して同じことを実行できますが、GUIファイルブラウザでポイントしてクリックする操作が正しく機能するようにするには、まだラッパーが必要です。