Неке Басх опције су добро познате и често се користе. На пример, многи људи пишу на почетку сценарија
сет -о ктраце
за отклањање грешака,
сет -о еррекит
да грешком изађе или
сет -о еррунсет
да изађете ако позвана променљива није подешена.
Али постоји много других опција. Понекад су превише конфузно описани у манама, па сам овде сакупио неке од најкориснијих, са објашњењем.
Напомена: Мац рачунари могу имати старију верзију басх-а (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
$
Извор: ввв.хабр.цом