Changing Directories/pl
Zawsze sprawdzaj status chdir. Unikniesz w ten sposób wywoływania poleceń w złym katalogu. Ewentualnie używaj pełnych ścieżek.
#!/bin/sh cd $nosuchdir || exit 1 rsync gdzieindziej:/foo .
Bez przełącznika || exit 1 polecenie rsync może wrzucić pliki do złego katalogu lub przenieść je na złą partycję.
- Przekierowanie.
Może mieć miejsce (prawie) wszędzie.
$ echo a b >c $ echo >c a b $ >c echo a b
Umieszczenie nazwy pliku na początku pozwala na łatwiejszą edycję zapytania (argumentów wyszukiwania).
$ </var/log/messages grep foo $ </var/log/messages grep bar $ </var/log/messages grep user1
- Przekierowanie strumienia danych (pipe'owanie).
Autor często używa xargs(1)do konwertowania wyjścia (dane z pliku lub innego programu) aby użyć go jako argumentu dla innego programu. Przykład.
$ cvs up | perl -ne 'print if s/M //' | xargs cvs ci
Zależnie od edytora, można użyć powyższej koncepcji do otwarcia niektórych plików w celu edycji, na przykład skonfliktowane pliki w CVSie:
$ cvs up | perl -ne 'print if s/C //' | xargs vi ex/vi: standardowe wejście i wyjście programu Vi musi być terminalem $ cvs up | perl -ne 'print if s/C //' | xargs emacs emacs: nie można użyć TTY na wejściu $ cvs up | perl -ne 'print if s/C //' | xargs bbedit
- Uporczywe pliki
Radzenie sobie z plikami, które mają dziwne znaki w nazwie często bywa uporczywe (nie można wpisać poprawnej nazwy). Można użyć graficznego menedżera plików, ale autor uważa to za mało wygodne rozwiązanie. Ciężko uporać się w nim z dużą liczbą plików i zazwyczaj nie jest zainstalowany w systemie operacyjnym serwera.
Aby łatwo usunąć krzaczki z nazw plików, istnieje kilka opcji.
- Uściślij ścieżkę.
Pliki rozpoczynające się od kreski (jak np. -rf) uruchomią opcję programu (zadziałają jak przełącznik), ponieważ shell jest bardzo głupi. Można tego uniknąć wyłączając przełączniki lub używając prefiksu w postaci ścieżki do katalogu, w którym ten plik się znajduje.
$ ls -rf $ rm -rf $ ls -rf $ rm * $ ls -rf $ rm -- -rf $ ls $ touch ./-rf $ ls -rf $ rm ./-rf $ ls $
- Znajdź inode i usuń go.
Każdy plik w systemie Unix ma swój, przypisany do niego, ponumerowany inode. Znająć numer i-węzła (node znaczy węzeł) pliku możemy go wyszukać i usunąć.
$ ls -i *
615383 foo
$ find . -inum 615383 -exec rm {} \;