Generalnie, tutaj jest jeden sposób, aby obsługiwać standardowe wejście do skryptu:
#!/bin/bash
while read line; do
echo $line
done
czyli bardzo szorstki bash odpowiadający cat
. To demonstruje kluczowy fakt: każde polecenie wewnątrz skryptu dziedziczy standardowe wejście z powłoki, więc nie musisz robić nic specjalnego, aby uzyskać dostęp do danych. read
pobiera dane wejściowe z powłoki, która (w twoim przypadku) pobiera dane z procesu tail
podłączonego do niego przez rurę.
Jako inny przykład rozważ ten skrypt; nazwać to "mygrep.sh".
#!/bin/bash
grep "$1"
Teraz gazociąg
some-text-producing-command | ./mygrep.sh bob
zachowuje się identycznie jak
some-text-producing-command | grep bob
$1
jest ustawiony jeśli zadzwonisz skrypt tak:
./myscript.sh foo
Następnie $1
ma wartość "foo".
Parametry pozycyjne i standardowe wejście są oddzielne; można zrobić to teraz norma
tail -n +1 -f your_log_file | myscript.sh foo
wejście jest nadal pochodzących z procesu tail
i $1
jest nadal ustawiony na „foo”.
Brakuje argument przypisać do '$ 1 '.Rura łączy wyjście ogona ze standardowym wejściem twojego skryptu. Czy możesz opublikować "myscript.sh", lub przynajmniej na tyle, aby określić, czy potrzebujesz argumentu (i jaki powinien być ten argument) oraz jak będzie on obsługiwał dane prezentowane na jego standardowym wejściu. – chepner