Команда bash запускается в консоли, но не в скрипте - PullRequest
0 голосов
/ 20 октября 2018

У меня есть скрипт bash, который по сути запускает вычисленную команду grep для файла:

cat $myfile | $string

, где myfile - это список слов и строк, это команда grep с параметрами:

/usr/bin/grep -v  -e b -e j -e k -e l -e m -e q -e v -e x

Параметры grep вычисляются ранее в сценарии из другого процесса. Когда я запускаю команду cat $myfile | $string из консоли, я получаю ожидаемый результат.Когда команда запускается из скрипта, я получаю:

./sp2: line 126: /usr/bin/grep -v  -e b -e j -e k -e l -e m -e q -e v -e x : No such file or directory

Это выполняется через Cygwin, и действительно работало несколько лет назад.Сейчас ... не так уж много.

Если у кого-то есть какие-либо идеи о том, что это за проблема, и как я могу ее решить, я, безусловно, буду признателен.

Приветствия!

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

Вы можете попробовать добавить это в строку перед ним:

echo "cat $myfile | $string"

(давайте посмотрим, что он делает)

Вы можете также изменить его на egrep после получения этой печати изПредыдущая команда и посмотреть, что она делает в сценарии, добавлена ​​вручную?

egrep -v "(b|j|k|l|m|q|v|x)" "${myfile}"

(как-то так)

0 голосов
/ 20 октября 2018

Если это не проблема с цитированием, как предлагали другие, есть ли конкретная причина, по которой вы используете Cygwin?

Если вы используете Windows 10, она имеет очень хорошую встроенную подсистему Linux, которая намного лучше, чем Cygwin.Если это не жизнеспособный подход для вас, я бы попробовал, прежде чем тратить много времени на то, что может быть отличительным от Cygwin.

0 голосов
/ 20 октября 2018

Это прекрасно работает для меня, когда я пытаюсь использовать и sh, и bash.Я подозреваю, что ваша проблема в том, что файл сценария содержит cat $myfile | "$string", а не cat $myfile | $string.Первый из них будет обрабатывать содержимое $ string как один токен, а не разделяться пробелами, что будет вызывать именно то поведение, которое вы видите.

...