@BrDaHa Jak mogę również przekierować stderr za pomocą> | także? Próbowałem i> | ale to nie zadziałało.
Tu Bui,
@TuBui nie jestem pewien, dlaczego to nie działa dla Ciebie. Na mojej maszynie &>| filedziała. Jakiej powłoki i wersji używasz? @stimulate dla zsh oba powinny działać , dla bash to tylko>|
Griddo
@Griddo moja powłoka to wersja bash 4.3.48 (1) -release. echo "aaa" &>| test.txtpowoduje błąd -bash: syntax error near unexpected token |. Mój noclobber jest włączony.
Tu Bui
1
@TuBui Najwyraźniej nie testowałem poprawnie. Dla mnie to też nie działa ... jednak dokumentacja nie stwierdza, że i tak powinno być możliwe. Prawdopodobnie będziesz musiał trzymać się echo "aaa" >| test.txt 2>&1lub używać innej powłoki.
Griddo
40
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 ..
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:
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.źródło
-bash: TheAccount.txt: cannot overwrite existing file
.>
i>>
są wyjściowymi operatorami przekierowania . Operator rur jest|
.>|
aby wymusić zastąpienie istniejącegoW 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
źródło
&>| file
działa. Jakiej powłoki i wersji używasz? @stimulate dla zsh oba powinny działać , dla bash to tylko>|
echo "aaa" &>| test.txt
powoduje błąd-bash: syntax error near unexpected token |
. Mój noclobber jest włączony.echo "aaa" >| test.txt 2>&1
lub używać innej powłoki.Mimo
NylonSmile
odpowiedzi , 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
aby rozwiązać moje problemy .. Musiałem użyć ...
>!
, á la ..Oczywiście uważaj na to ...
źródło
NOCLOBBER
. Użyj,setopt clobber
aby przywrócić domyślne zachowanie.Jeśli twoje środowisko nie pozwala na nadpisywanie
>
, użyj potoku|
itee
zamiast tego:Zauważ, że to również wydrukuje na standardowe wyjście. Jeśli jest to niepożądane, możesz przekierować dane wyjściowe
/dev/null
w następujący sposób:źródło
źródło
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: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.
źródło
Aby zastąpić zawartość jednego pliku innym plikiem. użyj kota np.
Teraz, aby zastąpić foobar, możemy użyć polecenia kota, jak poniżej
źródło
>>
dodaje, nie zastępujeJeś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).źródło