Czy ktoś mógłby mi wyjaśnić różnicę między używaniem poleceń powłoki >
a >>
używaniem poleceń powłoki?
Przykład:
ps -aux > log
ps -aux >> log
Wygląda na to, że wynik jest taki sam w obu przypadkach.
command-line
whale_steward
źródło
źródło
Odpowiedzi:
>
służy do zastępowania („ clobber ”) pliku i>>
służy do dołączania do pliku.Tak więc, gdy użyjesz
ps aux > file
, wynikps aux
zostanie zapisanyfile
i jeśli plik o nazwiefile
był już obecny, jego zawartość zostanie zastąpiona.A jeśli użyjesz
ps aux >> file
, wynikps aux
zostanie zapisany do,file
a jeśli plik o nazwiefile
był już obecny, plik będzie teraz zawierał swoją poprzednią zawartość, a także zawartośćps aux
, zapisaną po jego starszej zawartościfile
.źródło
jeśli piszesz w terminalu
Umieści wyjście
ps aux
logu o nazwie plik.to jeśli umieścisz
następne wyjście zostanie dołączone poniżej pierwszego. jeśli umieścisz tylko jeden
>
, zastąpi on poprzedni plik.źródło
Tak,
>>
dołącza,>
zawsze zastępuje / niszczy poprzednią zawartość.jest taki sam jak
Na Wintel to samo za
.bat
,.cmd
a.ps1
skrypty zbyt; wspólne dziedzictwo, zdrowy rozsądek.źródło
Najważniejszą różnicą jest to,
>
że powłoka otwiera plik lub obiekt podobnyO_WRONLY|O_CREAT|O_TRUNC
do pliku z flagami - plik zostanie utworzony lub obcięty, jeśli istnieje, podczas gdy>>
otwiera plik zO_WRONLY|O_CREAT|O_APPEND
flagami - plik zostanie utworzony lub dołączony, jeśli istnieje. Jest to widoczne, jeśli śledzisz wywołania systemowe, na przykład za pomocąI z
Zauważ, że w obu przypadkach deskryptor pliku otwartego pliku jest duplikowany w deskryptorze pliku 1 (stdout) polecenia i zostanie on odziedziczony przez dowolne polecenie rozwidlone przez powłokę.
źródło