回答:
によると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