Istnieje różnica między argumentami wiersza poleceń a standardowymi danymi wejściowymi. Rura połączy standardowe wyjście jednego procesu ze standardowym wejściem innego. Więc
ls | echo
Łączy standardowe wyjście ls ze standardowym wejściem echa. Dobrze, prawda? Cóż, echo ignoruje standardowe wejście i zrzuci argumenty wiersza poleceń - których w tym przypadku nie ma - na swoje standardowe wyjście. Wynik: w ogóle nic.
W tym przypadku istnieje kilka rozwiązań. Jednym z nich jest użycie polecenia, które odczytuje stdin i zrzuca na standardowe wyjście, takie jak cat.
ls | cat
Będzie „działać”, w zależności od twojej definicji pracy.
Ale co z ogólnym przypadkiem. Naprawdę chcesz przekonwertować standardowe wyjście jednego polecenia na argumenty wiersza poleceń innego. Jak powiedzieli inni, xargs
jest kanonicznym narzędziem pomocniczym w tym przypadku, czytając jego linię poleceń argumentów dla polecenia ze standardowego wejścia i konstruując polecenia do uruchomienia.
ls | xargs echo
Można to również przekonwertować za pomocą polecenia podstawienia $()
echo $(ls)
Zrobiłbym również, co chcesz.
Oba te narzędzia są bardzo ważne dla skryptów powłoki, powinieneś nauczyć się obu.
Dla kompletności, jak wskazano w pytaniu, innym podstawowym sposobem konwersji stdin na argumenty linii poleceń jest wbudowane read
polecenie powłoki . Konwertuje „słowa” (słowa zdefiniowane przez IFS
zmienną) na zmienną tymczasową, której można używać w dowolnych uruchomieniach poleceń.
ls | echo
zrobić? dlaczego po prostu nie uruchomićls
?