Bash Flashcards

1
Q

Różnica między globbing i regex

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Różnice w działaniu . (kropki), ? oraz * pomiędzy regexem a globbingiem

A

. - 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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Dlaczego warto pierwszy argument grepa przekazywać w cudzysłowie lub apostrofach?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Czym różni się umieszczanie zmiennej środowiskowej w pojedynczych vs podwójnych ciapkach?

A

W podwójnych ciapkach następuje ewalucja, w pojedynczych nie.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Jak wyciągnąć n-tą wartość tablicy ze zmiennej środowiskowej?

A

${ZMIENNA[n]}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Jak utworzyć zmienną środowiskową tylko do odczytu?

A

readonly MYVAR=xyz

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Jakie zastosowanie ma słowo kluczowe export przy deklarowaniu zmiennej środowiskowej?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Jak zadeklarować zmienną lokalną dla bashowego procesu?

A

function myfunc {
local MYVAR=xyz
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Jak usunąć funkcję lub zmienną z sesji basha?

A

unset MYVAR
unset -f myfunc

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Jak sprawdzić jakie funkcje mamy zadeklarowane w bieżącej sesji basha? Jak wypisać ich body a jak tylko nazwy?

A

declare -f (razem z body)
declare -F (tylko nazwy)

Dokładnie tak samo działa typeset

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Jak sprawdzić czy coś jest builtin?

A

which cd - nic nie zwróci bo to jest builtin
which grep - zwróci ścieżkę ze zmiennej PATH

Ale najlepiej sprawdzić builtinem type

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Jak sprawdzić czy komenda jest funkcją, shell builtin, aliasem czy programem? Czym jest type?

A

type pwd
type myfunc
type grep
type ll

Type jest builtinem

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Jak zrobić redirect stderr?

A

komenda 2> plik

2 - to file descriptor dla stderr

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Co robi 2>&1?

A

Przekierowuje stderr w to samo miejsce, w które wskazuje w tym miejscu standard output. Kolejność gdzie to jest umieszczone w komendzie ma znaczenie!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Jak przekierować na standard input wykonywanej komendy zawartość pliku?

A

grep -c test < filename.txt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Do czego służy builtin source?

A

Wykonuję skrypt w bieżącym kontekście shella, np. masz dostęp do ustawionych wcześniej zmiennych środowiskowych.

17
Q

Jak wykonać command substitution?

A

$(komenda), jest też backtick ale preferowana jest ta pierwsza opcja, bo jest standardem i łatwiej zagnieżdżać

18
Q

Jak sprawdzić status ostatniej wykonanej komendy/builtina/funkcji? Jaki status oznacza wykonanie zakończone sukcesem?

A

$?
wartość zero

19
Q

Jakie statusy w bashu odpowiadają za:
-command not found
-signal n
-permission problem or command is not executable

A

-127
-128+n
-126

20
Q

Co oznaczają special parametry $!, $#oraz $$?

A

$! - PID of the most recepty executed background process
$# - przekażą liczbę parametrów pozycyjnych przekazanych do skryptu
$$ - w uproszczeniu PID of the current shell

21
Q

Różnica między [ a [[

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