Bash Flashcards
Różnica między globbing i regex
Globbing - dotyczy file expansion w unixie, trochę inne zasady działania znaków specjalnych niż regex, pozwala dopasować pliki/foldery
Regex - dotyczy dopasowania wzorców wewnątrz plików testowych, np. grep przyjmuje jako pierwszy argument pattern do spasowania wewnątrz pliku
Różnice w działaniu . (kropki), ? oraz * pomiędzy regexem a globbingiem
. - dowolny znak w regexie, brak specjalnego znaczenia w globbingu (chociaż ma specjalne znaczenie w unixie, np. ukryte pliki)
? - dokładnie jeden dowolny znak w globbingu, zero lub jeden znak poprzedzający pytajnik w regexie
* - zero lub więcej znaków w globbingu, zero lub wiele poprzedzających znaków w regexie
Dlaczego warto pierwszy argument grepa przekazywać w cudzysłowie lub apostrofach?
Bo bash najpierw wykona globbing, i jeśli jakiś plik w bieżącym folderze pasuje to przekaże jego zamiast podanej frazy dosłownie, np.
grep file* README.txt może zostać rozwinięte do grep filename.txt README.txt
Czym różni się umieszczanie zmiennej środowiskowej w pojedynczych vs podwójnych ciapkach?
W podwójnych ciapkach następuje ewalucja, w pojedynczych nie.
Jak wyciągnąć n-tą wartość tablicy ze zmiennej środowiskowej?
${ZMIENNA[n]}
Jak utworzyć zmienną środowiskową tylko do odczytu?
readonly MYVAR=xyz
Jakie zastosowanie ma słowo kluczowe export przy deklarowaniu zmiennej środowiskowej?
Sprawia, że zmienna będzie też widoczna w procesach w drzewie procesów wychodzących od procesu, w którym ta zmienna została zadeklarowana.
Jak zadeklarować zmienną lokalną dla bashowego procesu?
function myfunc {
local MYVAR=xyz
}
Jak usunąć funkcję lub zmienną z sesji basha?
unset MYVAR
unset -f myfunc
Jak sprawdzić jakie funkcje mamy zadeklarowane w bieżącej sesji basha? Jak wypisać ich body a jak tylko nazwy?
declare -f (razem z body)
declare -F (tylko nazwy)
Dokładnie tak samo działa typeset
Jak sprawdzić czy coś jest builtin?
which cd - nic nie zwróci bo to jest builtin
which grep - zwróci ścieżkę ze zmiennej PATH
Ale najlepiej sprawdzić builtinem type
Jak sprawdzić czy komenda jest funkcją, shell builtin, aliasem czy programem? Czym jest type?
type pwd
type myfunc
type grep
type ll
Type jest builtinem
Jak zrobić redirect stderr?
komenda 2> plik
2 - to file descriptor dla stderr
Co robi 2>&1?
Przekierowuje stderr w to samo miejsce, w które wskazuje w tym miejscu standard output. Kolejność gdzie to jest umieszczone w komendzie ma znaczenie!
Jak przekierować na standard input wykonywanej komendy zawartość pliku?
grep -c test < filename.txt
Do czego służy builtin source?
Wykonuję skrypt w bieżącym kontekście shella, np. masz dostęp do ustawionych wcześniej zmiennych środowiskowych.
Jak wykonać command substitution?
$(komenda), jest też backtick ale preferowana jest ta pierwsza opcja, bo jest standardem i łatwiej zagnieżdżać
Jak sprawdzić status ostatniej wykonanej komendy/builtina/funkcji? Jaki status oznacza wykonanie zakończone sukcesem?
$?
wartość zero
Jakie statusy w bashu odpowiadają za:
-command not found
-signal n
-permission problem or command is not executable
-127
-128+n
-126
Co oznaczają special parametry $!, $#oraz $$?
$! - PID of the most recepty executed background process
$# - przekażą liczbę parametrów pozycyjnych przekazanych do skryptu
$$ - w uproszczeniu PID of the current shell
Różnica między [ a [[
[ jest builtinem (ale również programem pokazywanym przez which, jego inna nazwa to test)
[[ - shell keyword, dzięki czemu pozwala na łatwiejszą składnię, np. nie trzeba escapować niektórych znaków
Pierwszy ma większą kompatybilność, ale drugi jest po prostu wygodniejszy