grep внутри сценария оболочки не работает - PullRequest
1 голос
/ 28 апреля 2011

Когда я запускаю это в командной строке, оно работает:

ls | grep -v "#$"

Но когда я делаю ls | scriptname и внутри скрипта у меня есть:

#fileformat=unix
#!/bin/bash
grep -iv '#$'

Это не работает.Почему?

[EDIT]

причина первой строки объясняется здесь .

, кроме того, даже если я удаляю первые две строки, этоДолжно сработать.Я попробовал то же самое на удаленной учетной записи Solaris, и это сработало.так это моя установка Fedora?

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Строка hash-bang должна быть первой строкой в ​​скрипте. Избавьтесь от #fileformat=unix. Также убедитесь, что ваш скрипт исполняемый (chmod +x scriptname). Это работает:

#!/bin/bash
grep -iv '#$'
0 голосов
/ 28 апреля 2011

1-й раз вам нужно #!/ bin / bash в качестве первой строки в вашем скрипте.

Тогда '# $' не имеет значения в пантеоне параметров оболочки.Вы ищете «#» в конце строки?(Все в порядке).Но если вы имели в виду «$ #», но тогда «$ #» - это параметр, который означает «количество аргументов в командной строке»

Как правило, для передачи списка файлов в сценарий, для которого необходимо выполнить действие, потребуетсябыть достигнуто с дальнейшей оберткой.Таким образом, простое, общее решение проблемы, которую вы ставите, может быть:

$cat scriptname
#!/bin/bash

while read fileTargs ; do
   grep -iv "${@}" ${fileTargs}   # (search targets).
done

называется

ls | scriptname srchTargets

Надеюсь, это поможет.

0 голосов
/ 28 апреля 2011

Измените его на ls < scriptname, чтобы вывод передавался в ls.

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