Проблемы при выполнении команды GREP / CUT из скрипта Bash - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь выполнить следующую команду в скрипте Bash:

grep 1001 -w /etc/passwd | cut -d ':' -f 1,4,5
grep 1004 -w /etc/passwd | cut -d ':' -f 1,4,5

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

вот мой сценарий:

#/bin/bash

#find the group number correlated to reader and user
reader=`grep reader /etc/group | cut -d ":" -f3`
user=`grep user /etc/group | cut -d ":" -f3`

echo reader: $reader #prints 1004
echo user: $user #prints 1001

cmdRead="grep ${reader} -w /etc/passwd | cut -d \":\" -f 1,4,5"
cmdUser="grep ${user} -w /etc/passwd | cut -d \":\" -f 1,4,5"

echo executing command: ${cmdRead}
echo `${cmdRead}`
echo executing command: ${cmdUser}
echo `${cmdUser}`

вывод этого кода дает:

reader: 1004
user: 1001
executing command: grep 1004 -w /etc/passwd | cut -d ":" -f 1,4,5
grep: invalid argument ‘":"’ for ‘--directories’
Valid arguments are:
  - ‘read’
  - ‘recurse’
  - ‘skip’
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

executing command: grep 1001 -w /etc/passwd | cut -d ":" -f 1,4,5
grep: invalid argument ‘":"’ for ‘--directories’
Valid arguments are:
  - ‘read’
  - ‘recurse’
  - ‘skip’
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

Я только начал изучать Bash вчера, поэтому я извиняюсь за новичкавопрос, но очень ценю любую помощь :)

1 Ответ

0 голосов
/ 31 октября 2019

Заключите вашу команду в $( ... ), а не в кавычки. Кроме того, нет необходимости указывать двоеточие в качестве значения параметра -f в cut, поэтому не нужно экранировать кавычки:

cmdRead=$(grep ${reader} -w /etc/passwd | cut -d: -f 1,4,5)
...