
bash
注文を実行するとどのような利点がありますか?私のターミナルウィンドウでは、肉眼で何が起こるのか見ることができません。増加したことを確認しましたが、$SHLVL
それ以外はbash
実装されているかどうかはわかりません。しかも走るのはbash --help
大きな意味がありません。私はbashが利用可能なシェルの1つであることを知っていますが、すでにBourne Againシェルを使用している場合は、入れ子にしても何の利点もありません。どのシナリオで実行する必要がありますかbash
?
答え1
bash
すでにシェルを実行している場合は、bash
別々に実行することの利点は1つだけです。新しいシェルは(どんなexport
アイテムにもかかわらず)「きれいな」環境を持ちます。
ただし、現在他のシェルを実行していてbash
スクリプトを呼び出そうとしていて、その権限が正しいshebang行(つまり実行可能ファイル)に+ x設定されていない場合は、それを使用して正しいbash /path/to/script.sh
シェルで実行されていることを確認できます。 。
答え2
(または開始するどのシェルでも)新しいシェルセッションを開始すると、bash
新しい環境が確立されます。親シェルセッションからすべての環境変数1を継承します。新しいセッションが終了すると、その環境は削除されます。
#!
スクリプトを実行したり(スクリプト自体で-lineをバイパスしたり)、bash
環境で特定のコマンドを実行するための明示的なインタプリタとして使用することに加えて、対話型シェルを実行bash -c
するために使用することもbash
テストに役立ちます。
ksh93
私のログインシェルではないので、私はこれを使ってきましたが、bash
ここに多くの質問があるようですbash
。テストしたいものをテストしたら、exit
環境の一時変数による汚染なしでCtrl+D信頼できるセッションを再開できます。ksh93
bash
もちろん、ログインシェルが 。
実際、bash
クリーンセッションを開始するための小さなシェル機能もあります。デフォルトでは実行されますが(env -i bash
起動時にbash
環境変数は新しいセッションに送信されません)、一時作業ディレクトリも作成されます。終了後、ディレクトリはシェル機能によって削除されます。
1環境 変数はエクスポートされたシェル変数です。
誰でも興味があるなら:
function shell
{
# Starts the specified shell in a clean environment (save for HOME,
# TERM and SHELL) and with an empty temporary working directory.
# The working directory is deleted upon exiting the shell session.
# If no shell name is given, the shell is infered from $SHELL.
typeset shell="$( basename "${1:-$SHELL}" )"
typeset realshell="$( grep "^[^#].*/$shell\$" /etc/shells )"
if [[ -z "$realshell" ]] || [[ ! -x "$realshell" ]]; then
printf 'No such shell: %s\n' "$shell" >&2
return 1
fi
tmpcwd="$( mktemp -d "${TMPDIR:-/tmp}/shell-$shell.XXXXXXXX" )"
trap 'printf "Removing %s\n" "$tmpcwd" >&2; rm -rf "$tmpcwd"' EXIT
printf 'Starting %s in %s\n' "$realshell" "$tmpcwd" >&2
(
cd "$tmpcwd" &&
env -i SHELL="$realshell" \
TERM="$TERM" \
HOME="$HOME" \
"$realshell"
)
}
以下を使用してください(読みやすくするために追加の改行が挿入されています)。
$ shell bash
Starting /usr/local/bin/bash in /tmp/shell-bash.mqUhTkBF
bash-4.4$ ls
bash-4.4$ env
PWD=/tmp/shell-bash.mqUhTkBF
HOME=/home/kk
TERM=rxvt
SHELL=/usr/local/bin/bash
SHLVL=1
_=/usr/bin/env
bash-4.4$ exit
exit
Removing /tmp/shell-bash.mqUhTkBF