回答:
によるとman bash:
PS1が設定され、bashが対話型の場合は$-にiが含まれ、シェルスクリプトまたはスタートアップファイルでこの状態をテストできます。
以下を使用できます。
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
また:
ログインシェルではないインタラクティブシェルが起動すると、bashは/etc/bash.bashrcおよび〜/ .bashrcからコマンドを読み取り、実行します(これらのファイルが存在する場合)。
だから、~/.bashrc唯一の対話型シェルのために供給されます。予想される動作を妨げるため、人々はそれをソースとする~/.bash_profileか~/.profile、間違っていることがあります。一般的なコードの保守を簡素化する場合は、別のファイルを使用して共通のコードを含め、両方のrcファイルから独立してソースする必要があります。
rcなどのログインファイルからの標準出力への出力がない場合、~/.bash_profileまたは~/.profileの適切な操作を妨げる可能性があるため、これが最適ですrsync。
いずれにしても、誤った構成が存在する可能性があるため、対話性をテストすることをお勧めします。
[[ $- =~ i ]] && echo interactive
i
~/.bash_profileか、~/.profileそれが予想される動作を妨害するので間違っています。あなたは調達をどう思いますか~/.bashrcから~/.bash_login?ログインシェルはインタラクティブである必要はないので、私もそれが間違っていると思います。
つかいます:
if tty -s; then echo interactive; fi
testツール(manページから)これをチェックすることができます:
-t FD True if FD is opened on a terminal.
たとえば、次を使用できます。
if [ -t 0 ] ; then
echo stdin is a terminal
.....
fi
または
if [ -t 1 ] ; then
echo stdout is a terminal
fi
bash <<< 'test -t 0 && echo Y || echo X'書き込みY、bash -c 'test -t 0 && echo Y || echo X'書き込みX