Как заменить длинный канал обработки ввода скриптом? - PullRequest
0 голосов
/ 15 марта 2011

У меня длинная команда оболочки, что-то вроде этого:

cat file \
  | perl -pe 's/...//g' \
  | grep -v "hehe" \
  | $HOME/scripts/foo.pl \
  | sort | uniq -c

Теперь я хотел бы поместить всю трубу в скрипт script.sh, чтобы команда стала:

cat file | ./script.sh

В идеале сценарий также должен быть таким, который можно вызывать так:

./script.sh file

Но как мне написать этот скрипт? Это кажется не совсем простым для меня. Есть предложения?

Ответы [ 2 ]

1 голос
/ 15 марта 2011

содержание script.sh:

cat $1 \<br> | perl -pe 's/...//g' \<br> | grep -v "hehe" \<br> | $HOME/scripts/foo.pl \<br> | sort | uniq -c

А затем запустите его как ./script.sh file.

Должен сделать трюк.Обратите внимание на $1, который ссылается на первый (и единственный) параметр командной строки.

0 голосов
/ 15 марта 2011

Комбинируя простую оболочку с небольшим количеством Perl DWIMery, вы можете заставить свой скрипт делать все правильно.

#!/bin/bash
perl -pe 's/...//g' "$@" \
  | grep -v "hehe" \
  | $HOME/scripts/foo.pl \
  | sort | uniq -c

Вы можете запустить его как ./script.sh file, и он будет читать file или как grep foo file | ./script.sh и будет читать с STDIN.В bash и некоторых других оболочках "$@" расширяется до списка цитируемых аргументов, или ничего, если нет аргументов.Если perl не имеет аргументов файла, по умолчанию он будет считываться с STDIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...