grep никогда не выходит, когда он должен искать в маленьком временном файле - PullRequest
0 голосов
/ 14 января 2020

У меня проблема с mktemp и grep.

OUT=$(mktemp /tmp/output.XXXXXXXXXX) || { echo "Failed to create temp file"; exit 1; }
awk -F: '{print $7}' /etc/passwd >> $OUT
grep -c $1 $OUT

В строке grep код не выходит, не печатает значение grep Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 14 января 2020

BlackPearl выше, вероятно, правильно - $1 скорее всего пуст во время выполнения вашей программы. В результате команда grep выглядит следующим образом: grep -c $OUT, которая указывает grep искать $OUT в stdin. stdin - это клавиатура (я подозреваю), поэтому grep будет ждать вечно (ну, пока вы не нажмете Ctrl-D или Ctrl- C).

Чтобы решить вашу проблему, укажите параметр при выполнении скрипта.

Вы также можете полностью избежать этой проблемы, посчитав все уникальные значения в вашем файле passwd следующим образом:

OUT=$(mktemp /tmp/output.XXXXXXXXXX) || { echo "Failed to create temp file"; exit 1; }
awk -F: '{print $7}' /etc/passwd >> "$OUT"
sort "$OUT" | uniq -c  # count each unique value in passwd file column 7
...