benefício de executar o comando bash [closed]

0

Qual é o benefício de executar o comando bash ? Na minha janela de terminal, nada visível ao olho acontece. Notei que o $SHLVL é incrementado, mas ao lado disso eu não saberia que bash foi executado. Além disso, executar bash --help não conta muito. Eu sei que o bash é um dos shells disponíveis, mas se você já estiver usando o shell Bourne Again, não vejo nenhum benefício de aninhar nele. Em quais cenários devo executar bash ?

    
por potato 31.01.2017 / 18:11

2 respostas

3

Executar bash por si só se você já estiver executando um bash shell realmente só tem um benefício plausível - o novo shell terá um ambiente "limpo" (não obstante qualquer export s).

No entanto, se você estiver executando qualquer outro shell e quiser chamar um script bash , e suas permissões não estiverem definidas como + x (ou seja, executável) com uma linha shebang adequada, use bash /path/to/script.sh para garantir que ele seja executado com o shell adequado.

    
por 31.01.2017 / 18:21
3

Iniciar uma nova sessão de shell com bash (ou qualquer shell iniciado) configura um novo ambiente. Ele herdará quaisquer variáveis de ambiente 1 da sessão de shell pai. Depois que a nova sessão sai, seu ambiente é destruído.

Além de usá-lo como intérprete explícito para executar scripts (para ignorar a #! -line no próprio script) ou para executar comandos específicos em um bash environment com bash -c , inicie um shell interativo com Apenas bash pode ser útil para testar coisas.

Eu uso o tempo todo desde que meu shell de login é ksh93 em vez de bash , e muitas perguntas aqui parecem ser sobre bash . Uma vez que eu testei o que quer que eu quisesse testar, eu apenas exit (ou Ctrl + D ) e recuperei minha confiável ksh93 session sem nenhuma poluição de variáveis temporárias em meu ambiente.

Eu faria isso mesmo se meu shell de login fosse bash , claro.

Na verdade, eu até tenho uma pequena função de shell que uso para iniciar uma sessão bash limpa. Ele essencialmente executa env -i bash (que inicia bash sem transferir variáveis de ambiente para a nova sessão), mas também cria um diretório de trabalho temporário. Ao sair, o diretório é removido pela função shell.

1 Uma variável de ambiente é uma variável do shell que foi exportada.

Se alguém estiver interessado:

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"
    )
}

Usando (novas linhas extras inseridas para legibilidade):

$ 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
    
por 31.01.2017 / 19:52

Tags