BashはインタラクティブSSHセッションと組み込みSSHセッションを区別できますか?

BashはインタラクティブSSHセッションと組み込みSSHセッションを区別できますか?

環境変数と設定は、実際にセッションにログインしたときにのみ読み取るように見えるため、対話型プロンプトで実行する必要があるBashスクリプトがあります。例は次のとおりです。

いいね

me@client:~$ ssh box
user@box:~$ /usr/local/bin/myscript

悪い

me@client:~$ ssh box "/usr/local/bin/myscript"

単一行SSHコマンドで実行されていることを確認するためにスクリプトで使用できるBash-fuはありますか?

答え1

標準入力に接続されている端末があることを確認できます(ttyコマンドが実行する操作)。スクリプトに次の行を追加します。

if ! tty >/dev/null; then
    echo "Must be run from a tty"
    exit 1
fi

正しく実行されない場合、スクリプトはエラーで終了します。

$ ssh badabing ~/scripts/a.sh
Must be run from a tty

$ ssh badabing
terdon@badabing ~ $ ~/scripts/a.sh
Works!

関連情報