Odpowiedzi:
Przydałoby się trochę zrozumienia działania * rur * nix.
Krótko mówiąc, >>operator przekierowania doda linie na końcu określonego pliku, gdzie jako pojedynczy większy niż >opróżni i nadpisze plik.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file.
>i >>są wyjściowymi operatorami przekierowania . Operator rur jest |.
>|aby wymusić zastąpienie istniejącego
W Bash, jeśli ustawiłeś noclobber a la set -o noclobber, wówczas używasz składni>|
Na przykład:
echo "some text" >| existing_file
Działa to również, jeśli plik jeszcze nie istnieje
Sprawdź, czy noclobber jest ustawiony za pomocą: set -o | grep noclobber
Bardziej szczegółowe wyjaśnienie tego szczególnego rodzaju operatora znajduje się w tym poście
Bardziej wyczerpującą listę operatorów przekierowań znajdziesz w tym poście
&>| filedziała. Jakiej powłoki i wersji używasz? @stimulate dla zsh oba powinny działać , dla bash to tylko>|
echo "aaa" &>| test.txtpowoduje błąd -bash: syntax error near unexpected token |. Mój noclobber jest włączony.
echo "aaa" >| test.txt 2>&1lub używać innej powłoki.
Mimo NylonSmileodpowiedzi , która jest „w pewnym sensie poprawna”, nie byłem w stanie nadpisać plików, w ten sposób…
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
aby rozwiązać moje problemy .. Musiałem użyć ... >!, á la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Oczywiście uważaj na to ...
NOCLOBBER. Użyj, setopt clobber aby przywrócić domyślne zachowanie.
Jeśli twoje środowisko nie pozwala na nadpisywanie >, użyj potoku |i teezamiast tego:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Zauważ, że to również wydrukuje na standardowe wyjście. Jeśli jest to niepożądane, możesz przekierować dane wyjściowe /dev/nullw następujący sposób:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
Wystarczy zauważyć, że jeśli chcesz przekierować zarówno std :: cerr, jak i std :: cout do pliku, gdy masz ustawiony noclobber (tj. set -o noclobber), Możesz użyć kodu:
cmd >|file.txt 2>&1
Więcej informacji na ten temat można znaleźć na stronie https://stackoverflow.com/a/876242 .
Również ta odpowiedź na pytanie @ TuBui na odpowiedź @BrDaHa podana powyżej w dniu 9 sierpnia 18 o 9:34.
Aby zastąpić zawartość jednego pliku innym plikiem. użyj kota np.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Teraz, aby zastąpić foobar, możemy użyć polecenia kota, jak poniżej
cat bar.txt >> foobar.txt
cat foobar.txt
>>dodaje, nie zastępuje
Jeśli masz dane wyjściowe, które mogą zawierać błędy, możesz użyć znaku handlowego „ ampersand” i większego niż w następujący sposób:
my_task &> 'Users/Name/Desktop/task_output.log' spowoduje to przekierowanie zarówno stderr, jak i stdout do pliku dziennika (zamiast tylko stdout).