Algunhas opcións de Bash son coñecidas e úsanse a miúdo. Por exemplo, moitas persoas escriben ao comezo do guión
set -o xtrace
para depurar,
set -o levantado
saír por erro ou
set -o errunset
para saír se a variable chamada non está definida.
Pero hai moitas outras opcións. Ás veces descríbense de forma demasiado confusa en manas, polo que recompilei aquí algunhas das máis útiles, con explicación.
Nota: os Mac poden ter unha versión máis antiga de bash (3.x en lugar de 4.x) onde non todas estas opcións están dispoñibles. Neste caso, véxase
set
ou shopt
?
Hai dúas formas de configurar as opcións de bash: desde un script ou desde a liña de comandos. Podes usar comandos integrados set
и shopt
. Ambos cambian o comportamento do shell, fan o mesmo (con argumentos diferentes), pero difiren no seu set
son herdados ou prestados de parámetros doutros shells, mentres que os parámetros shopt
creado en bash.
Se queres ver as opcións actuais, executa:
$ set -o
$ shopt
Para activar a opción en set
Emprégase sintaxe longa ou curta:
$ set -o errunset
$ set -e
O efecto é o mesmo.
Para desactivar a opción, cómpre poñer un plus en lugar dun menos:
$ set +e
Durante moito tempo non recordaba esta sintaxe porque a lóxica parecía incorrecta (un signo menos activa a opción e un signo máis desactivala).
В shopt
As bandeiras (máis lóxicas) úsanse para activar e desactivar as opcións -s
(conxunto) e -u
(desactivado):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Cambiando directorios
Hai varias opcións que che axudan a traballar con directorios.
1.cdspell
Con esta configuración, bash comezará a comprender os erros tipográficos e levarache ao cartafol cuxo nome escribiches mal.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Levo moitos anos usando esta opción e moi raramente (quizais unha vez ao ano) toma unha decisión moi estraña. Pero noutros días cdspell
aforra tempo, literalmente todos os días.
2. autocd
Se non estás disposto a aceptar a ineficacia de varias entradas cd
, entón pode configurar esta opción para moverse ao cartafol X se o comando X non existe.
$ shopt -s autocd
$ abcdefg
$ cd ..
Combinado co autocompletado, isto permítelle saltar rapidamente entre cartafoles:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Simplemente non nomees o cartafol rm -rf *
(si, por certo, isto é posible).
3.directexpand
Esta é unha opción xenial que amplía as variables de ambiente premendo Tab:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
Saída limpa
4. traballos de verificación
Esta opción deixa de saír da sesión se aínda hai traballos en execución en segundo plano.
En lugar de saír, móstrase unha lista de tarefas sen rematar. Se aínda queres saír, entra de novo exit
.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID процесса для оболочки
$ sleep 999 &
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID процесса для оболочки тот же
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= на этот раз ID процесса изменился
Superpoderes de substitución
5.globstar
Esta opción dáche superpoderes de substitución! Se entras:
$ shopt -s globstar
$ ls **
entón o shell mostrará todos os directorios e subdirectorios de forma recursiva.
En conxunto con direxpand
Podes ver rapidamente todo o que se atopa abaixo na xerarquía:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Esta opción activa funcións que se asocian máis habitualmente coas expresións regulares. Ás veces isto é moi útil:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Aquí os patróns colócanse entre parénteses e sepáranse por unha barra vertical. Aquí están os operadores dispoñibles:
? = coincide con cero ou unha aparición dos patróns indicados! = mostrar todo o que non coincide cos patróns indicados * = cero ou máis ocorrencias + = unha ou máis ocorrencias @ = exactamente unha ocorrencia
Protección contra accidentes
7. histverify
Pode dar un pouco de medo ao principio usar os comandos de inicio rápido do historial de abreviaturas !!
и !$
.
Opción histverify
permíteche ver primeiro como Bash interpreta o comando antes de que se execute:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
De novo, para protexerse de accidentes, é dicir, de sobrescribir un ficheiro que xa existe co operador de redirección (>
). Isto pode ser un desastre se non tes unha copia de seguridade.
Opción set -С
prohíbe tal sobreescritura. Se é necesario, pode evitar a protección mediante o operador >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Fonte: www.habr.com