Jaka jest różnica między „>” a „>>”?

12

Jaka jest różnica między ls >i ls >>? Muszę to zrozumieć dla moich obliczeń GCSE, ale nie wiem, jaka jest różnica.

Helen Schofield
źródło
1
Oprócz miłej odpowiedzi poniżej, zobacz drugą (i najbardziej uprzywilejowaną) odpowiedź na stackoverflow.com/a/984761/1841533: użycie >> do zapisu do pliku (np. Log) ma również miły efekt uboczny nie mają znaków „Nul” pojawiających się na początku pliku saif, jeśli plik jest obcinany, gdy proces wciąż do niego zapisuje! (np .: podczas rotacji pliku dziennika). Ponieważ „foo> file” nie szuka, nie zauważa zmiany rozmiaru i nadal wskazuje dalej niż na początku, a system operacyjny wypełnia się wartością Nul. Plik foo >> szuka, a zatem wskazuje na nową pozycję (początek).
Olivier Dulac,
Ponieważ jest to pytanie edukacyjne, proponuję nauczyć się pracy z odpowiednią dokumentacją: Podręcznik referencyjny Bash, sekcja „Przekierowania” (dostępny również przez man bash).
David Foerster

Odpowiedzi:

28

>i >>są operatorami przekierowań; przenoszą produkcję czegoś, w tym przypadku lsgdzie indziej. Jeśli dane wyjściowe >trafią do pliku, zostanie obcięty - tzn. Usunie wszelkie poprzednie treści, a jednocześnie >>doda nowe dane na końcu pliku, zachowując poprzednią zawartość. Będzie to działać z dowolnym wejściem, więc echo& catna przykład można również użyć w ten sposób.

Interesujący jest również |operator, który przekazuje dane do innej aplikacji - dzięki ls | cat -ntemu otrzymasz listę z numerami wierszy!

Rury to odpowiedni termin.

Mark Williams
źródło
2
Obcinać czy nadpisywać?
DK Bose,
2
@DKBose z stracewyjściem do bash -c 'echo a > blah': open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666)tak truncate byłby odpowiedni termin.
muru
„potoki”, a także „przekierowanie danych wyjściowych”, które są używane w odpowiedzi. Dobra robota.
0x Owczarek
znalazłem, co miałem na myśli: oprócz tej ładnej odpowiedzi, zobacz drugą (i najbardziej uprzywilejowaną) odpowiedź na stackoverflow.com/a/984761/1841533 : używanie >>do zapisu do pliku (np. log) również ma fajną stronę efekt, aby na początku pliku saif nie pojawiały się znaki „Nul”, jeśli plik jest obcinany, gdy proces wciąż do niego zapisuje! (np .: podczas rotacji pliku dziennika). Ponieważ „foo> file” nie szuka, nie zauważa zmiany rozmiaru i nadal wskazuje dalej niż na początku, a system operacyjny wypełnia się wartością Nul. foo >>fileszuka, a zatem wskazuje na nową pozycję (początek).
Olivier Dulac,
5

Symbole >i >>służą do przekierowania wyjścia do pliku.

Oba utworzą plik, jeśli plik nie istnieje. Jeśli plik już istnieje, to >nadpisze plik, do którego >>dołączą dane.

Więc ls > myfilebędzie stworzyć dokument o nazwie myfile, jeśli nie istnieje. Jeśli myfilejest już obecny i zawiera pewne dane, zostanie nadpisany nowymi danymi, które przekażesz.

Natomiast ls >> myfileutworzy plik, jeśli nie istnieje, i zapisze w nim dane. Jeśli plik istnieje z pewnymi danymi, nowe dane są dodawane na końcu.

Sudheer
źródło
0

JEŻELI użyjesz jednego>, plik zostanie zastąpiony, jeśli już istnieje. Zachowaj ostrożność podczas korzystania z tego.

Jeśli użyjesz dwóch >>, to po prostu dołączy (innymi słowy, zacznij pisać na dole pliku), jeśli już istnieje. W przeciwnym razie tworzy nowy plik, jeśli nie istnieje.

Eric Larson
źródło
1
Po co powtarzać już udzieloną odpowiedź?
Wymagaj