Czy można użyć wielu dokumentów tutaj, aby wprowadzić dane wejściowe do polecenia w bash?
$ cat <<<foo <<<bar
bar
$ cat <<EOF1 <<EOF2
> foo
> EOF1
> bar
> EOF2
bar
Oczywiście w obu przypadkach drugi tutaj dokument jest używany jako stdin i zastępuje pierwsze odniesienie. Czy echo
zamiast tego można użyć s?
$ cat <(echo -n foo) <(echo bar)
foobar
Z jakiegoś powodu użycie kombinacji nie działało dla mnie. Dlaczego miałoby to być?
$ cat <<<foo <(echo bar)
bar
$ cat <(echo -n foo) <<<bar
foo
bash
io-redirection
here-document
Krogulec
źródło
źródło
paste
z fałszywymi danymi wejściowymi. Myślę, że mogę wymyślić kilka innych scenariuszy. Gdybym miał skrypt z wstępnie zmanipulowanym tekstem w kilku zmiennych, to mógłbym chcieć coś zrobić z oboma za pomocą polecenia, które pobiera tylko plikidiff
.cat <<EOF1 <<"EOF2"
.Odpowiedzi:
Możesz to zrobić:
Może być tylko jedno wejście standardowe, ponieważ istnieje tylko jeden deskryptor pliku 0.
jest skrótem od:
I:
jest:
Musisz zdecydować, co otworzyć w deskryptorze pliku 0.
Jest:
Gdzie
123
znajduje się deskryptor pliku dla potoku i równolegle bash działaecho foo
w innym procesie, a standardowe wyjście jest przekierowywane na drugi koniec potoku.Po przekazać nazwę pliku
cat
,cat
nie czytać ze standardowego wejścia. Potrzebujesz:Lub:
(
-
ma powiedzieć,cat
aby czytać ze standardowego wejścia).źródło
cat <<EOF
nie jest dokładnie taki sam jakcat /dev/fd/0...
: w tym drugim przypadkucat
widzi nazwę pliku i otwiera.cat
odczytuje z jegofd
0, jakby przekazał argument-
lub/dev/fd/0
(choć w Linuksie (i tylko w Linuksie), otwarcie/dev/fd/0
nie jest dokładnie takie jak powielanie deskryptora pliku 0)./dev/fd/3 3<< E1
konstrukcją i zastanawiam się teraz, czym dokładnie są przedmioty w katalogu / dev / fd /. Wydaje mi się, że w jakiś sposób pojawiają się magicznie, gdy proces otwiera plik gdzieś w systemie plików, z wyjątkiem 1 i 2, które są tam domyślnie dla każdego procesu. Ale w twoim przykładzie używasz deskryptora pliku 3 i 4, które nie są podłączone do żadnego rzeczywistego pliku oprócz tego przekierowania wejściowego. Nie mogę tego pojąć w moim mentalnym modelu deskryptorów plików. Co jeśli proces chce otworzyć inny plik, czy wiedziałby, że musi użyć fd 5? Czy fds musi być 3, 4, 5 ... czy może być czymkolwiek?