grep -v -f пустого файла, различного между сценарием и командной строкой в ​​OS X - PullRequest
0 голосов
/ 13 февраля 2019

В bash, в Terminal на моем Mac (но не в Linux), grep -v -f ведет себя по-разному в зависимости от того, выполняется ли он в командной строке или в скрипте.Из командной строки:

$ touch empty-file  #create an empty file
$ printf 'foo' | grep -v -f empty-file
foo

Это как и ожидалось.Но когда эта строка находится в скрипте, она ничего не выводит.Вот сценарий:

$ cat grep-v-in-script.sh 
#!/usr/bin/env bash
printf 'foo\n' | grep -v -f empty-file
printf 'end of script\n'

Когда я выполняю этот сценарий:

$ ./grep-v-in-script.sh 
end of script

Если я запускаю тот же сценарий в Linux, он работает как положено:

herdrick@some-linux-server:~$ ./grep-v-in-script.sh 
foo
end of script

FWIW на моем Mac, если я изменю 'grep -v -f' на 'grep -f', то он снова ничего не выводит, но на этот раз это ожидаемо.

Вот моя версия bash:

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема заключается просто в несовместимости GNU grep и BSD grep.Смотрите комментарий к сообщению @ that-other-guy.

Моя путаница произошла из-за того, что я установил псевдоним для использования GNU grep.В противном случае нет никакой разницы между выполнением этого в командной строке и в сценарии.

...