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?
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?
Odpowiedzi:
Przekierowuje stdout programu przed >>
i dołącza go do podanego pliku po.
>> file command
echo a b >> c d
dołącza się a b d
do pliku o nazwie c
.
>>
?Za pomocą >>
dołączasz dane wyjściowe polecenia do pliku.
Twoje przykładowe polecenie składa się zasadniczo z kilku części:
polecenie >> nazwa pliku
Tak więc wynik command
zostanie dołączony do filename
.
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ściowych echo
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 Enter foo\n
rzeczywisty wynik echo
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.
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>
lub 2>>
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 .
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.
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;
Fred
Barney
echo Dino >> flintstones.txt
spowoduje dodanie „Dino” na końcu pliku;
Fred
Barney
Dino
echo Dino > flintstones.txt
pokazującego, że jego zawartość byłaby po prostu Dino
wykonana za pomocą pojedynczej strzałki w prawo.
Znowu, jeśli tak
> somefile.txt
Cała zawartość pliku zostanie wyczyszczona.
> file
usuwa plik, ale >> file
nic nie robi.
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ń.