Saltar ao contido

Bash/Vantaxes

En Galilibros, o Wikibooks en galego.


As seguintes son algunhas das funcionalidades máis salientables de Bash:

Inicio

[editar]

Ademais das opcións da liña de ordes dun só carácter que adoitan poder configurarse mediante a orde set, pódense usar outras moitas opcións de varios caracteres.

Ficheiros de inicio

[editar]

Os ficheiros de inicio son guións que Bash lee e executa ao iniciarse. Que ficheiros de inicio se executan depende da maneira en que se inicie Bash:

Inicio como terminal de identificación interactivo ou con --login

[editar]

Enténdese por “interactivo” que se poden introducir ordes. O terminal non está a executarse porque se activou un guión. O de «terminal de identificación» significa que para acceder ao terminal fai falla identificarse no sistema, xeralmente mediante unha combinación de usuario e contrasinal.

Os seguintes son os ficheiros que se lerán:

  • /etc/profile
  • o primeiro ficheiro que exista e poda lerse dos seguintes:
    • ~/.bash_profile
    • ~/.bash_login
    • ~/.profile
  • ~/.bash_logout ao pechar o terminal.

Aparecerán mensaxes de erro cando se atope algún dos ficheiros pero non se poida ler. Cando Bash non atope un dos ficheiros, irá polo seguinte.

Inicio como terminal sen identificación interactivo

[editar]

Na terminal sen identificación non fai falla identificarse no sistema. Serán deste tipo os terminais abertos premendo unha icona ou unha entrada do menú no modo gráfico.

O ficheiro que se le é o ~/.bashrc.

Inicio non interactivo

[editar]

Todos os guións empregan terminais non interactivos. Están programados para realizar unha serie de tarefas concretas que non poden cambiar.

O ficheiro que se le é o que estea definido na variable BASH_ENV. Para a busca do ficheiro non se emprega a variable PATH, polo que cómpre indicar a ruta completa ao ficheiro.

Inicio mediante a orde sh

[editar]

Os seguintes son os ficheiros que se lerán:

  • /etc/profile
  • ~/.profile

Cando se inicie de maneira interactiva, a variable ENV pode conter información adicional sobre o inicio.

Modo POSIX

[editar]

Para activar esta opción pode facerse mediante a orde set:

set -o posix

Ou chamando a bash xunto coa opción --posix. Entón Bash procurará comportarse acorde ao estándar POSIX dentro das súas posibilidades. Configurar a variable POSIXLY_CORRECT ten o mesmo efecto.

O ficheiro que se lea será o definido na variable ENV.

Inicio remoto

[editar]

Cando se inicia mediante rshd, o ficheiro que se lea será ~/.bashrc.

Inicio sendo o UID distinto do EUID

[editar]

Neste caso non se le ningún ficheiro.

Terminais interactivos

[editar]

Xeralmente os terminais interactivos escriben e len no terminal do usuario. Bash iníciase de maneira interactiva cando se executa sen argumentos ─opcións aparte salvo que a opción sexa unha cadea da que ler ou cando se inicia para ler da entrada estándar─.

Saber se un terminal é interactivo

[editar]

Para saber se un terminal é interactivo, abonda con ver o que hai no parámetro especial -, que conterá un i se é interactivo:

[usuario@máquina ~]$ echo $-
himBH

Nos terminais non interactivos, o prompt, PS1, non está activado.

Comportamento dos terminais interactivos

[editar]

A seguinte é unha lista das diferencias do modo interactivo:

  • Bash le ficheiros de inicio.
  • O control de traballos está activado de maneira predeterminada.
  • Os prompts están activados, PS2 estao para ordes de varias liñas, xeralmente co valor >. Este prompt aparecerá tamén cando o terminal pense que se introduciu unha orde incompleta, como cando se esquece un " final ou estruturas de ordes que non se poden deixar de lado, etc.
  • De maneira predeterminada, as ordes lense da liña de ordes mediante readline.
  • Ao chegar a un fin de ficheiro (EOF), en vez de saír inmediatamente Bash interpreta a orde ignoreeof.
  • O historial de ordes e a expansión do historial están activadas de maneira predeterminada. O historial gárdase na ruta indicada na variable HISTFILE ao saír do terminal. O valor predeterminado da variable é ~/.bash_history.
  • A expansión de alias está activada.
  • A falta de trampas, o sinal SIGTERM ignórase.
  • A falta de trampas, o sinal SIGINT recóllese e xestiónase. Por iso ao premer a combinación de teclas Ctrl+C, por exemplo, o terminal non desaparece.
  • Enviar sinais SIGHUP a todos os traballos ao saír configúrase coa opción --huponexit.
  • As ordes execútanse a medida que se len.
  • Bash comproba se hai correo periodicamente.
  • Bash pode configurarse para pecharse ao atopar variables ás que non se fixese referencia. No modo interactivo este comportamento está desactivado.
  • Non se pechará o terminal por atoparse erros de redirección nas ordes propias.
  • Non se pechará o terminal porque ordes propias especiais devolvan erros ao empregalas no modo POSIX.
  • Non se pechará o terminal por un fallo de exec.
  • Non se pechará o terminal por erros de análise da sintaxe.
  • A comprobación simple dos argumentos da orde propia cxd está activada de maneira predeterminada.
  • Está activada a saída automática unha vez se esgote o tempo indicado na variable TMOUT.

Condicionais

[editar]

A orde [[ e as ordes propias test e [ empregan expresións condicionais.

As expresións poderán ter un ou dous elementos. As dun só elemento adoitan empregarse para comprobar o estado dun ficheiro. Nelas só se necesita un elemento, no exemplo un ficheiro, para realizar a operación.

Tamén hai operadores de cadea e de comparación numérica, que necesitarán de dous elementos para que a operación se efectúe.

Operacións aritméticas

[editar]

O terminal permite calcular operacións aritméticas, ben como unha das expansións do terminal ben mediante a orde propia let.

O cálculo realízase con variables de tipo enteiro de tamaño fixo sen ningún tipo de comprobación en caso de desbordamento, se ben as divisións entre 0 trampéanse e márcanse como erro. Os operadores e as súas regras son os mesmos que na linguaxe de programación C.

Alias

[editar]

Os alias permiten que unha palabra se substitúa por unha cadea de texto ao empregarse a palabra como a primeira dunha orde simple. O terminal mantén unha lista de alias que poden activarse e desactivarse mediante as ordes alias e unalias respectivamente.

Bash sempre le polo menos unha liña de entrada completa antes de executar ningunha das ordes que contén. Os alias aplícanse durante a lectura da orde, non durante a súa execución. Por tanto, unha definición de alias que apareza na mesma liña que outra orde non ten efecto ata que se le a seguinte liña de entrada. As ordes que sigan á definición do alias na mesma liña non se ven afectadas por dita definición.

Os alias aplícanse ao ler a definición dunha función, non ao executala, xa que a definición dunha función é de por si unha orde complexa. Como consecuencia, os alias que se definan nunha función non estarán dispoñibles ata despois que se execute dita función.

Matrices

[editar]

Bash permite o uso de variables de tipo matriz dunha dimensión. Calquera variable pode empregarse como tal. A orde propia declare permite declarar matrices explicitamente. As matrices non teñen ningún tipo de límite na súa lonxitude, nin é necesario que os seus membros estean indexados ou se asignen de maneira contigua. As matrices numéranse a partir de cero.

Rima de directorios

[editar]

A rima (stack) de directorios é unha lista dos últimos directorios nos que se estivo. A orde propia pushd engade os directorios á rima ao tempo que cambia o directorio actual, e a orde propia popd elimina os directorios indicados da rima ao tempo que se sitúa neles.

O contido da rima pode comprobarse executando dirs ou vendo o contido da variable DIRSTACK.

O terminal restrinxido

[editar]

Ao iniciar Bash mediante a orde rbash ou coa opción --restricted ou -r ocorre o seguinte:

  • A orde propia cd desactívase.
  • Non se poden alterar as variables SHELL, PATH, ENV ou BASH_ENV.
  • Os nomes das ordes non poden conter barras inclinadas («/»).
  • Non se permiten nomes de ficheiro que conteñan unha barra inclinada («/») coa orde propia . (source).
  • A orde propia hash non admite barras inclinadas («/») coa opción -p.
  • A importación de funcións durante o inicio está desactivada.
  • SHELLOPTS ignórase durante o inicio.
  • A redirección da saída mediante >, >|, ><, >&, &> e >> está desactivada.
  • A orde propia exec está desactivada.
  • As opcións -f e -d da orde propia enable están desactivadas.
  • A ruta predeterminada non pode indicarse mediante a orde propia command.
  • Non se pode apagar o modo restrinxido.

Ao executarse un guión, rbash apágase e as restricións ignóranse para a execución do guión.