./command <<< kilka argumentów

-5

Jeśli mam program o nazwie „prog”, który wymaga tylko jednego argumentu, mogę napisać:

./prog <<< 1

Ale jeśli mam program, który wymaga 2 argumentów, dlaczego to nie działa:

./prog <<< 2 3

Nie mogłem znaleźć odpowiedzi Googling. Jak to może działać?

Uwaga: Potrzebuję tego, aby napisać .sh

jemino
źródło
<<<nie dostarcza argumentów , dostarcza danych wejściowych . Linia wejściowa składająca się z 2, spacji 3i nowej linii to jedna linia wejściowa , a nie dwa argumenty.
G-Man

Odpowiedzi:

3

<<<Operator jest udokumentowane w bash(1)podręczniku. Dotyczy „ciągów tutaj” (podobnych w koncepcji do „dokumentów tutaj”, które od wieków są w składni powłoki).

Składnia:

command <<< word

… Rozwija się wordi przekazuje commandjako standardowe wejście.

Jest to równoważne z:

echo word | command

Jeśli naprawdę chciałeś przekazać zarówno 1, jak i 2 jako standardowe wejście (nie argumenty / parametry), możesz to zrobić za pomocą:

./command <<< "1 2"

lub

./command <<< 1\ 2

Zasadniczo musisz uciec spacji między 1 a 2, aby nie dzieliła ona danych wejściowych na dwa słowa.

Spiff
źródło
-1

Nie mogłem znaleźć żadnego odniesienia do operatora „<<<” dla bash, ale wydawało się, że wziął tekst natychmiast po operatorze i przeanalizował go jako pierwszą zmienną.

Jeśli piszesz skrypt BASH, nie jest to konieczne. Możesz po prostu użyć $ X dla każdej zmiennej, a następnie dodać zmienne do skryptu. Na przykład:

/bin/bash
echo "Usage:  $0 variable1 variable2"
echo "Variable 1 value is $1"
echo "Variable 2 value is $2"

Jeśli więc zapiszesz powyższy plik jako „test.sh”, spraw, aby był wykonywalny, uruchom go jako ./test.sh hello world

Wyprowadzi Zastosowanie: ./test.sh zmienna1 zmienna2 Wartość zmiennej 1 to hello Wartość zmiennej 2 to hello world

0 $ = nazwa skryptu. Jeśli chcesz przekazać 2 parametry ze spacjami, na przykład „Hello World” i „This is a test”, nazwałbyś to ./test.sh „Hello World” „his is a test”

Davidgo
źródło
Dzięki @davidgo, w rzeczywistości moim problemem nie było wejście * .sh, a raczej wejście programu „prog”. Napisałem odpowiedź z moim rozwiązaniem.
yemino
Naprawdę? Nie przeczytałeś Jakie są operatory kontroli i przekierowania powłoki? jeszcze?
G-Man
-1

Oto jak rozwiązałem mój problem:

#/bin/bash
(echo 1 2)  |  ./prog
jemino
źródło