Ostatnio powtarzam krótkie zdania do tree_hole
pliku.
Korzystałem echo 'something' >> tree_hole
z tej pracy.
Ale zawsze martwiłem się tym, co jeśli wprowadzę w błąd >
zamiast >>
, ponieważ robiłem to często.
Więc stworzyłem własny bashrc w bashrc:
function th { echo "$1" >> /Users/zen1/zen/pythonstudy/tree_hole; }
export -f th
Ale zastanawiam się, czy istnieje inny prosty sposób dodawania wierszy na końcu pliku. Ponieważ być może będę musiał używać tego często przy innych okazjach.
Czy jest jakiś?
rm="rm -i"
i w innym środowisku pisałemrm *
czekając na pytania potwierdzające. Uczysz się niebezpiecznych nawyków!Odpowiedzi:
Ustaw
noclobber
opcję powłoki :źródło
>|
.zsh
domyślnie włącza to zachowanie.setopt noclobber
isetopt clobber
. Wygląda na to, że nie jest dokładnie „domyślny”, zależy to od plików konfiguracyjnych dostarczonych z dystrybucją.set [+-]C
każdą nowoczesną powłokąset +o noclobber
w bash, lubset +C
.Jeśli obawiasz się, że plik zostanie uszkodzony przez
>
operatora, możesz zmienić atrybut pliku tak, aby dołączał tylko:W systemie plików ext2 / ext3 / ext4 :
chattr +a file.txt
W systemie plików XFS :
echo chattr +a | xfs_io file.txt
A jeśli chcesz funkcji, już stworzyłem funkcję dla siebie (użyłem jej w pliku usługi do rejestrowania wyników), możesz ją zmienić do własnych celów:
źródło
$
), aby uniknąć globowania, podziału słów i powiązanych problemów z białymi znakami. Internetowa aplikacja ShellCheck może wykryć ten i wiele innych problemów w skryptach bash. Podobna uwaga"$@"
jest znacznie bezpieczniejsza niż$*
.read
polecenie z-r
opcją, aby zapobiec odwrotnym ukośnikom na wejściu przed ucieczką następującego znaku. 3) W skryptach bash zwykle używa się małych liter w nazwach zmiennych skryptu, ponieważ dla zmiennych systemowych używana jest WSZYSTKIE GÓRNA LICZBA. Jeśli więc użyjesz wielkich liter do własnych zmiennych, pomylisz ludzi, którzy czytają Twój kod, i możesz przypadkowo zablokować zmienną systemową, której chcesz użyć później w skrypcie. A jeśli źródła skryptu, to sprać zmienne dla kolejnych poleceń.echo
jest przydatny do drukowania stałych ciągów, ale może robić nieoczekiwane rzeczy z dowolnymi danymi, szczególnie w systemach GNU. Jest o wiele bezpieczniejszy w użyciuprintf
. Aby uzyskać więcej informacji, zobacz unix.stackexchange.com/questions/65803/ ..., zwłaszcza odpowiedź Stéphane'a Chazelasa.Użyj
tee
z opcją dołączania:źródło
>
postaci, mogą martwić się zapomnieniem-a
opcji!wiele programów, które potrafią otwierać pliki do zastąpienia, może alternatywnie otwierać je w celu dołączenia, np. gnu dd.
może odczytać standardowe wejście lub plik o nazwie w
if=
parametrze add,2>/dev/null
aby pominąć liczbę bajtów.źródło
dd
to zły pomysł.dd
nie zapisuje niezawodnie swoich danych wejściowych na wyjściu , nawet jeśli jeden z nich nie jest zwykłym plikiem lub urządzeniem blokującymChciałbym użyć
sed
(nawet z kopią zapasową - patrz rozszerzenie później-i
):źródło
Zawsze możesz przeszukać plik na inne sposoby ...
... dziwnie wyglądające odbitki sekwencji:
Ale to trochę głupie.
Bardziej przydatny przykład może wyglądać następująco:
Możesz to nazwać tak:
I skończyłbyś z liczbą
file
wierszy zapisanychstderr
tuż przed operacją dołączania.źródło