Осам мало познатих Басх опција

Неке Басх опције су добро познате и често се користе. На пример, многи људи пишу на почетку сценарија

сет -о ктраце

за отклањање грешака,

сет -о еррекит

да грешком изађе или

сет -о еррунсет

да изађете ако позвана променљива није подешена.

Али постоји много других опција. Понекад су превише конфузно описани у манама, па сам овде сакупио неке од најкориснијих, са објашњењем.

Напомена: Мац рачунари могу имати старију верзију басх-а (3.к уместо 4.к) где нису доступне све ове опције. У овом случају, види овде или овде.

set или shopt?

Постоје два начина за подешавање басх опција: из скрипте или из командне линије. Можете користити уграђене команде set и shopt. Оба мењају понашање љуске, раде скоро исту ствар (са различитим аргументима), али се разликују по свом порекло... Опције set су наслеђени или позајмљени од параметара других шкољки, док параметри shopt креиран у басх-у.

Ако желите да видите тренутне опције, покрените:

$ set -o
$ shopt

Да бисте активирали опцију у set Дуга или кратка синтакса се користи:

$ set -o errunset
$ set -e

Ефекат је исти.

Да бисте онемогућили опцију, потребно је да ставите плус уместо минуса:

$ set +e

Дуго нисам могао да се сетим ове синтаксе јер је логика деловала погрешно (знак минус омогућава опцију, а знак плус је онемогућава).

В shopt (логичније) заставице се користе за омогућавање и онемогућавање опција -s (сет) и -u (неподешено):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Мењање директоријума

Постоји неколико опција које вам помажу да радите са директоријумима.

1.цдспелл

Са овим подешавањем, басх ће почети да разуме грешке у куцању и одвешће вас до фасцикле чије сте име погрешно написали.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

Користим ову опцију већ дуги низ година и врло ретко (можда једном годишње) донесе веома чудну одлуку. Али другим данима cdspell штеди време, буквално сваки дан.

2. аутоцд

Ако нисте вољни да прихватите неефикасност вишеструких уноса cd, онда можете да подесите ову опцију да се премести у фасциклу Кс ако Кс команда не постоји.

$ shopt -s autocd
$ abcdefg
$ cd ..

У комбинацији са аутоматским довршавањем, ово вам омогућава да брзо прелазите између фасцикли:

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

Само немојте именовати фасциклу rm -rf * (да, успут, ово је могуће).

3.дирекпанд

Ово је одлична опција која проширује варијабле окружења притиском на Таб:

$ shopt -s direxpand
$ ./[TAB]     # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  заменяется на...
$ /full/path/to/home/folder

чист излаз

4. провере

Ова опција зауставља одјављивање из сесије ако још увек постоје послови који се извршавају у позадини.

Уместо изласка, приказује се листа недовршених задатака. Ако и даље желите да изађете, уђите поново 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 процесса  изменился

Замена супермоћи

5.глобстар

Ова опција вам даје супермоћи замене! Ако унесете:

$ shopt -s globstar
$ ls **

онда ће љуска рекурзивно приказати све директоријуме и поддиректоријуме.

У комбинацији са direxpand Можете брзо да видите све ниже у хијерархији:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.ектглоб

Ова опција омогућава функције које су чешће повезане са регуларним изразима. Понекад је ово веома корисно:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

Овде су обрасци постављени у заградама и одвојени вертикалном траком. Ево доступних оператера:

? = одговара нули или једном појављивању датих образаца! = прикажи све што се не подудара са датим обрасцима * = нула или више појављивања + = једно или више појављивања @ = тачно једно појављивање

Заштита од незгода

7. хистверифи

У почетку може бити мало застрашујуће користити команде за брзо покретање из историје скраћеница !! и !$.

Опција histverify омогућава вам да прво видите како Басх тумачи команду пре него што се она заиста покрене:

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Ноцлоббер

Опет, ради заштите од незгода, односно од преписивања датотеке која већ постоји са оператором за преусмеравање (>). Ово може бити катастрофа ако немате резервну копију.

Опција set -С забрањује такво преписивање. Ако је потребно, можете заобићи заштиту помоћу оператера >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

Извор: ввв.хабр.цом

Додај коментар