Odpowiedzi:
Jeśli chcesz zrobić coś takiego, jak to, co lesssię dzieje (otrzymaj dane wejściowe na jego standardowym wejściu, przetworz je, a następnie wyślij) w skrypcie, który piszesz, możesz użyć while readpętli w skrypcie.
#!/bin/bash
echo "Beginning"
while read -r line
do
echo "Processed: [$line]"
done
echo "Ending"
Następnie możesz uruchomić go w następujący sposób:
some_command | your_script
a Twój wynik będzie wyglądał następująco:
Beginning
Processed: [First line of input]
Processed: [Second line of input]
Processed: [Third line of input]
Processed: [Fourth line of input]
Ending
Zakładając, że some_commandsamo to daje:
First line of input
Second line of input
Third line of input
Fourth line of input
Zmiennej $lineprzypisuje się kolejno wartość każdego wiersza danych wejściowych. Możesz kumulować te linie, jeśli potrzebujesz, łącząc każdą linię ze zmienną skalarną:
all=$all$line
lub
all+=$line
lub dodając elementy na końcu tablicy:
array+=($line)
Jesteś nieporozumienie command | less. W tym scenariuszu lesspolecenie nie powoduje połączenia; potok łączy poprzednie polecenie z less. Mówisz także „dane wejściowe”, a myślę, że masz na myśli „dane wyjściowe”. W tym przypadku wpisujesz do terminala; wyjście jest tym, co commandwypluwa z powrotem. less otrzymuje dane wyjściowe polecenia za pośrednictwem |(potok). Potok przyjmuje standardowe wyjście jednego polecenia i podłącza je jako standardowe wejście drugiego. ( Ten artykuł z Wikipedii może być pomocny na początek).
Aby przypisać wyjście jednej komendy do zmiennej, normalnie zrobiłbyś coś takiego:
variable=$(command)
# older syntax for above
variable=`command`
Ale bardzo wątpię, czy naprawdę chcesz przypisać dane wyjściowe apt-cache search foozmiennej.
Czy możesz rozwinąć nieco swój większy cel? Co naprawdę próbujesz zrobić?