スクリプトがあるとしましょう。
#!/bin/bash
whoami
foo
このスクリプトを実行するときは、常に実行前に印刷するようにしたいと思います。実際、私はfoo
スクリプトが実行される前に印刷したいと思います(この例だけではありません)。
このファイルを試してみましたが、うまくbashrc
いかないようです。
case $- in
*i*) echo "foo";;
*) return;;
esac
答え1
~/.bashrc
bash
posixモードで実行されていない非ログインの対話型呼び出しによってのみ解釈されます。
bashを呼び出すたびに解釈されるファイルの場合(posixモードで実行されているファイルを除く)、次のものを使用できます$BASH_ENV
。
$ cat ~/.bashenv
if [[ $- != *i* ]]; then
echo foo
fi
$ export BASH_ENV=~/.bashenv
$ bash -c 'echo bar'
foo
bar
これがecho foo
単にbashの解釈のためのものであればスクリプト、つまりbash
呼び出されたときbash /path/to/file
(#! /bin/bash
shebangを使用するか、より正確な#! /bin/bash -
形式)他の形式の非対話型シェル呼び出し(例:(bash -c code
コードの実行時に、、GNU ...によって実行される)、または)の代わりに変更できます。xterm
vi
parallel
$SHELL
bash < file
[[ $- != *i* ]]
[[ $- != *[ics]* ]]
zshに対応するのは~/.zshenv
(または$ZDOTDIR/.zshenv
)です。
パスしない限り、すべてのcsh / tcshはread()を呼び出します~/.cshrc
(これがほとんどのcshスクリプトにshebangがある理由です)。~/.tcshrc
-f
#! /bin/csh -f
kshは準拠していましたが、$ENV
セキュリティ上の理由から非対話型シェルでは中断されました($ENV
対話型呼び出し処理は依然としてPOSIX要件であり、シェルカスタムsh
ファイルを持つことができる唯一の方法です)。
¹ asで呼び出されたときsh
、環境があるとき、$POSIXLY_CORRECT
またはSHELLOPTS=posix
wihで呼び出されたときと同じです-o posix
。~/.bashrc
一部のbashバージョンを使用してsshを介して非対話型呼び出しを実行すると、bashシェルで解釈されることもあります。 Bash起動ファイルの処理は少し混乱しています。