Właśnie natrafiłem na polecenie podane poniżej -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Z tego, co zgaduję, jest prawdopodobnie używany do zatwierdzania zmian w .bash_profile, ale do czego dokładnie jest używany?
command-line
bash
terminal
.bash-profile
potwór
źródło
źródło
man bash
jest napisany dość oficjalnym językiem, może być trudny do zrozumienia. Z drugiej strony wyrażeniebash >>
zwraca kilka przydatnych linków w Google. To prawda, że chcemy gromadzić wiedzę bez polegania na Google; z tego powodu może pasować nawet pytanie z łatwą do przeszukiwania odpowiedzią. Jednak fakt, że nie podałeś odpowiedzi od razu (patrz Czy mogę odpowiedzieć na własne pytanie? ) Ani nie wskazałeś istniejących zasobów (które być może potrzebujesz pomocy w zrozumieniu), wskazuje na brak badań.Odpowiedzi:
Przekierowuje stdout programu przed
>>
i dołącza go do podanego pliku po.źródło
>> file command
echo a b >> c d
dołącza sięa b d
do pliku o nazwiec
.Krótka odpowiedź - co robi
>>
?Za pomocą
>>
dołączasz dane wyjściowe polecenia do pliku.Twoje przykładowe polecenie składa się zasadniczo z kilku części:
Tak więc wynik
command
zostanie dołączony dofilename
.Co dzieje się w konkretnym przypadku
echo
?W konkretnym przypadku
echo "…"
polecenie przekazuje argumenty wejściowe na „standardowe wyjście”, które jest tak zwanym „standardowym deskryptorem wyjściowym”. Po argumentach wejściowychecho
następuje newline (\n
), aby uzyskać podział wiersza.„Standardowy deskryptor wyjściowy” jest tutaj niczym więcej niż strumieniem wyjściowym wyświetlanym w powłoce podczas wykonywania polecenia. (Oznacza to, że po wpisaniu
echo foo
i naciśnięciu klawisza Enterfoo\n
rzeczywisty wynikecho
polecenia jest wyświetlany przez powłokę,foo
po której następuje nowa linia).Zasadniczo wszystko, co pisze do linii poleceń, używa standardowego wyjścia. Istnieje również inny deskryptor zwany „stderr”, który jest zwykle używany do komunikatów o błędach. Będzie również drukowane jak standardowe, więc czasami mogą być przeplatane. I jest deskryptor stdin, który jest używany do wprowadzania danych. Zobacz ten artykuł, aby uzyskać więcej informacji.
Jak przekierować wyjście w powłoce?
Zawsze możesz przekierować stdout do deskryptora pliku, co możesz zrobić za pomocą jednego z tych operatorów:
>
przekierowuje do deskryptora pliku. Tworzy plik, jeśli nie istnieje lub, jeśli już istnieje, obcina plik przed zapisaniem. Plik zostanie zatem zastąpiony przez stdout.>>
dołącza do deskryptora pliku. Tworzy plik, jeśli nie istnieje.Możesz również przekierować stderr za pomocą
2>
lub2>>
w podobny sposób. Lub możesz połączyć stderr i stdout w jeden plik:2>&1
robi to. Aby uzyskać więcej informacji na temat przekierowania i kilka innych przykładów, możesz przeczytać ten mały samouczek .Jak mogę dowiedzieć się, co oznacza określony fragment kodu powłoki?
Ogólnie rzecz biorąc, możesz spróbować wyjaśnić stronę shellhell.com , która da ci wizualne wskazówki i informacje na temat konkretnego polecenia powłoki.
źródło
Dla osób TLDR, które lubią widzieć przykład;
Standardowe wyjście (nie błędy) polecenia przed >> zostanie dodane na końcu nazwanego na końcu pliku.
Więc jeśli plik „flintstones.txt” zawiera;
echo Dino >> flintstones.txt
spowoduje dodanie „Dino” na końcu pliku;źródło
echo Dino > flintstones.txt
pokazującego, że jego zawartość byłaby po prostuDino
wykonana za pomocą pojedynczej strzałki w prawo.Znowu, jeśli tak
Cała zawartość pliku zostanie wyczyszczona.
źródło
> file
usuwa plik, ale>> file
nic nie robi.