bashコマンド実行の利点

bashコマンド実行の利点

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

関連情報