Przechwytywanie danych wyjściowych polecenia w zmiennej
1
Wiesz kiedy robisz coś takiego apt-cache search something | less? Cóż (w skrypcie Bash), jak uzyskać dane wejściowe i ustawić je na zmienną (tak jak lessrobi, ale lessnie jest to skrypt Bash)?
Chcesz więc zdefiniować zmienną zawierającą dane wyjściowe polecenia w skrypcie Bash?
cyr
Odpowiedzi:
1
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:
BeginningProcessed:[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ą:
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. lessotrzymuje 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ć?
Odpowiedzi:
Jeśli chcesz zrobić coś takiego, jak to, co
less
się 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 read
pętli w skrypcie.Następnie możesz uruchomić go w następujący sposób:
a Twój wynik będzie wyglądał następująco:
Zakładając, że
some_command
samo to daje:Zmiennej
$line
przypisuje 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ą:lub
lub dodając elementy na końcu tablicy:
źródło
Jesteś nieporozumienie
command | less
. W tym scenariuszuless
polecenie nie powoduje połączenia; potok łączy poprzednie polecenie zless
. 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, cocommand
wypluwa 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:
Ale bardzo wątpię, czy naprawdę chcesz przypisać dane wyjściowe
apt-cache search foo
zmiennej.Czy możesz rozwinąć nieco swój większy cel? Co naprawdę próbujesz zrobić?
źródło