Bash (Unix shell)
a sintaxe do comando Bash é um super-conjunto da sintaxe do comando Bourne shell. Bash suporta expansão de brace, completação de linha de comando (completação programável), depuração básica e tratamento de sinais (usando trap
) desde bash 2.05 a entre outras características. Bash pode executar a grande maioria dos scripts Bourne shell sem modificação, com a exceção dos scripts Bourne shell tropeçando em comportamento de sintaxe fringe interpretado de forma diferente em Bash ou tentando executar um comando de sistema correspondente a um Bash builtin mais recente, etc. Bash sintaxe de comando inclui idéias extraídas do KornShell (ksh) e o C shell (csh), tais como comandos de edição de linha de comando, história (history
comando), o diretório de pilha, o $RANDOM
e $PPID
variáveis, e POSIX substituição de comando sintaxe $(…)
.
Quando um usuário pressiona a tecla tab dentro de uma linha de comandos interativa, Bash automaticamente usa completação de linha de comando, desde a versão beta 2.04, para corresponder nomes de programas parcialmente digitados, nomes de arquivos e nomes de variáveis. O sistema de completação de linha de comandos Bash é muito flexível e personalizável, e muitas vezes é empacotado com funções que completam argumentos e nomes de arquivos para programas e tarefas específicas.
A sintaxe de Bash tem muitas extensões faltando no shell de Bourne. Bash pode realizar cálculos inteiros (“avaliação aritmética”) sem desova processos externos. Ele usa o comando ((…))
e o comando $((…))
sintaxe variável para este propósito. Sua sintaxe simplifica o redirecionamento I / O. Por exemplo, ele pode redirecionar a saída padrão (stdout) e o erro padrão (stderr) ao mesmo tempo usando o operador &>
. This is simpler to type than The Bourne shell equivalent ‘command > file 2>&1
‘. Bash suporta substituição de processo usando a sintaxe<(command)
e >(command)
, que substitui a saída de (ou entrada para) um comando onde um nome de arquivo é normalmente usado. (Isto é implementado através de tubos /proc/fd/ sem nome em sistemas que suportam isso, ou através de tubos temporários com nome, se necessário).
ao usar a palavra-chave ‘Função’, as declarações de função Bash não são compatíveis com os scripts Bourne/Korn/POSIX (o KornShell tem o mesmo problema ao usar a’ função’), mas Bash aceita a mesma sintaxe de declaração de função que as shells Bourne e Korn, e é POSIX-conformant. Devido a essas e outras diferenças, os scripts Bash shell são raramente executáveis sob os intérpretes Bourne ou Korn shell, a menos que deliberadamente escritos com essa compatibilidade em mente, o que está se tornando menos comum à medida que o Linux se torna mais difundido. Mas no modo POSIX, Bash se conforma com POSIX mais de perto.
Bash suporta aqui os documentos. Desde a Versão 2.05 B Bash pode redirecionar a entrada padrão (stdin) a partir de uma” cadeia aqui”usando o <<<
operador.
Bash 3. 0 suporta a correspondência de expressões regulares no processo usando uma reminiscência de sintaxe do Perl.
Em fevereiro de 2009, Bash 4.0 introduziu suporte para arrays associativos. Índices de array associativos são cadeias de caracteres, de uma forma semelhante a AWK ou Tcl. Eles podem ser usados para imitar matrizes multidimensionais. Bash 4 também muda sua licença para GPLv3; alguns usuários suspeitam que esta mudança de licenciamento é a razão pela qual MacOS continua a usar versões mais antigas. A Apple finalmente parou de usar a Bash em seus sistemas operacionais com o lançamento da MacOS Catalina em 2019.
Brace expansionEdit
Brace expansion, also called alternation, is a feature copied from the C shell. Gera um conjunto de combinações alternativas. Os resultados gerados não precisam existir como arquivos. Os resultados de cada string expandida não estão ordenados e a ordem esquerda para a direita é preservada:
$ echo a{p,c,d,b}eape ace ade abe$ echo {a,b,c}{d,e,f}ad ae af bd be bf cd ce cf
os utilizadores não devem usar extensões de suporte em scripts shell portáteis, porque a shell de Bourne não produz a mesma saída.
quando a expansão da bracelete é combinada com wildcards, os dentes são expandidos primeiro, e então os wildcards resultantes são substituídos normalmente. Assim, uma lista de imagens JPEG e PNG na pasta actual poderia ser obtida usando:
ls *.{jpg,jpeg,png} # expands to *.jpg *.jpeg *.png - after which, # the wildcards are processedecho *.{png,jp{e,}g} # echo just show the expansions - # and braces in braces are possible.
além da alternância, a expansão de chavetas pode ser usada para intervalos sequenciais entre dois inteiros ou caracteres separados por pontos duplos. As versões mais recentes da Bash permitem que um terceiro inteiro especifique o incremento.
$ echo {1..10}1 2 3 4 5 6 7 8 9 10$ echo file{1..4}.txtfile1.txt file2.txt file3.txt file4.txt$ echo {a..e}a b c d e$ echo {1..10..3}1 4 7 10$ echo {a..j..3}a d g j
Quando cinta de expansão é combinado com a expansão de variáveis a variável de expansão é realizada após a cinta de expansão, que em alguns casos podem exigir o uso de eval
construído-no, assim,:
$ start=1; end=10$ echo {$start..$end} # fails to expand due to the evaluation order{1..10}$ eval echo {$start..$end} # variable expansion occurs then resulting string is evaluated1 2 3 4 5 6 7 8 9 10
scriptsEdit de arranque
When Bash starts, it executes the commands in a variety of dot files. Ao contrário dos scripts da Bash shell, os arquivos dot normalmente não têm permissão de execução ativada nem uma diretiva interpretadora como #!/bin/bash
.
Legados compatíveis com Bash inicialização exampleEdit
O esqueleto ~/.bash_profile
abaixo é compatível com o Bourne shell e dá semântica semelhante ao csh para o ~/.bashrc
e ~/.bash_login
. O && cmd
é uma avaliação de curto-circuito que testa se o nome do arquivo existe e é legível, saltando a parte após o&&
se não for.
&& . ~/.profile # set up environment, once, Bourne-sh syntax onlyif ; then # are we interactive? && . ~/.bashrc # tty/prompt/function setup for interactive shells && . ~/.bash_login # any at-login tasks for login shell onlyfi # End of "if" block
problemas de sistema Operacional em Bash startupEdit
em Algumas versões do Unix e Linux conter Bash scripts de inicialização do sistema, geralmente sob o /etc
diretórios. Bash os chama como parte de sua inicialização padrão, mas outros arquivos de inicialização podem lê-los em uma ordem diferente da sequência documentada Bash startup. O conteúdo padrão dos arquivos do usuário root também pode ter problemas, bem como os arquivos esqueleto que o sistema fornece para novas contas de usuário após a configuração. Os scripts de inicialização que lançam o X window system também podem fazer coisas surpreendentes com os scripts de inicialização da Bash do usuário em uma tentativa de configurar as variáveis de ambiente do Usuário antes de lançar o Gerenciador de janelas. Esses problemas podem muitas vezes ser resolvidos utilizando uma ~/.xsession
ou ~/.xprofile
arquivo para leitura ~/.profile
— que fornece as variáveis de ambiente do Bash shell do windows gerado a partir da janela de gerenciador de necessidade, como o xterm ou Gnome Terminal.
PortabilityEdit
Invocando Bash com o --posix
opção ou informando set -o posix
em um script faz com que o Bash para conformar-se muito de perto para o padrão POSIX 1003.2. Os programas de consola da Bash destinados à portabilidade devem ter em conta, pelo menos, a norma POSIX shell. Algumas funcionalidades da bash não encontradas no POSIX são:
- Certos estendido invocação opções
- Cinta de expansão
- Matrizes e arrays associativos
- O colchete duplo
]
extended test (teste de construir e de sua correspondência de expressões regulares - O duplo parênteses aritmética-avaliação de construir (apenas
(( ... )
;$ (... ))
é POSIX) - Certos de manipulação de cadeia de operações no parâmetro de expansão
-
local
para o escopo de variáveis - Processo de substituição
- Bash específicas builtins
- Coprocesses
- $EPOCHSECONDS e $EPOCHREALTIME variáveis
Se um pedaço de código usa um recurso, ele é chamado de um “bashism” – um problema para o uso portátil. Debian checkbashisms
e Vidar Holen do shellcheck
podem ser usados para certificar-se de que um script não contém essas peças. A lista varia dependendo do destino real shell: a política Debian permite algumas extensões em seus scripts (como o são em dash
), enquanto um script que pretendam apoio pré-POSIX Bourne conchas, como o autoconf e o configurar
, são ainda mais limitadas em recursos que podem usar.
atalhos de teclado
Bash usa a readline para fornecer atalhos de teclado para edição de linhas de comandos, usando as combinações de teclas predefinidas (Emacs). As ligações Vi podem ser ativadas executando set -o vi
.
processo managementEdit
a linha de comandos Bash tem dois modos de execução para os comandos: lote e modo concorrente.
Para executar comandos em lote (por exemplo, na seqüência) devem ser separados pelo caractere “;”, ou em linhas separadas:
command1; command2
neste exemplo, quando command1 é terminado, o comando2 é executado.
Um plano de execução de command1 pode ocorrer usando (símbolo &) no final de um comando de execução, e o processo será executado em segundo plano devolver imediatamente o controle para o shell e permitindo a continuação da execução de comandos.
command1 &
ou para ter uma execução simultânea de dois command1 e command2, eles devem ser executados na shell Bash da seguinte forma:
command1 & command2
neste caso comando1 é executado no plano de fundo & símbolo, retornando imediatamente o controle para o shell, que é executado o comando2 em primeiro plano.
um processo pode ser parado e o controle retornado à bash, escrevendo Ctrl+z enquanto o processo está em execução no primeiro plano.
Uma lista de todos os processos, tanto no plano de fundo e interrompido, pode ser obtida mediante a execução de jobs
:
$ jobs- Running command1 &+ Stopped command2
Na saída, o número entre parênteses refere-se à identificação do trabalho. The plus signifies the default process for bg
and fg
. O texto “Running” e “Stopped” referem-se ao Estado do processo. O último texto é o comando que iniciou o processo.
O Estado de um processo pode ser alterado usando vários comandos. O comando fg
traz um processo para o primeiro plano, enquanto bg
define um processo parado rodando em segundo plano. bg
and fg
can take a job id as their first argument, to specify the process to act on. Sem um, eles usam o processo padrão, identificado por um sinal de mais na saída de jobs
. O comando kill
pode ser usado para terminar um processo prematuramente, enviando-lhe um sinal. O trabalho de identificação deve ser especificado após um sinal de porcentagem:
kill %1
Condicional executionEdit
Bash suprimentos “condicional” execução de comando de separadores que tornam a execução de um comando do contingente no código de saída definido por um precedente de comando. Por exemplo:
cd "$SOMEWHERE" && ./do_something || echo "An error occurred" >&2
Where./do_ something só é executado se o comando cd (change directory) foi “bem sucedido” (devolveu um estado de saída de zero) e o comando echo só seria executado se o cd ou o .o comando /do_ something devolve um “erro” (estado de saída não-zero).
para todos os comandos, o estado de saída é armazenado na variável especial . Bash também suporta if ...;entao ...;mais ...; fi
and case $VARIABLE in $pattern)...;;$other_pattern)...;; esac
formas de avaliação condicional de comando.
Bug reportingEdit
um comando externo chamado bashbug reporta erros da linha de comandos Bash. Quando o comando é invocado, ele traz o editor padrão do usuário com um formulário para preencher. O formulário é enviado para os mantenedores da Bash (ou opcionalmente para outros endereços de E-mail).
Programável completionEdit
Bash programável conclusão, complete
e compgen
comandos estão disponíveis desde a versão beta 2.04 em 2000. Estas instalações permitem complexo inteligente de conclusão, assim como a oferta para guia-completo disponível do programa opções e, em seguida, depois que o usuário seleciona uma opção que requer um nome de arquivo como sua próxima entrada, apenas auto-completar caminhos de arquivo (e não outras opções) para o próximo token.
Leave a Reply