grep хорошо работает в командной строке, но ничего не возвращает в сценарии

sed 's/^.*(//;s/)$//' /path/to/file

Сломать это:

sed stream editor. 's/^.*(//;s/)$//' сценарий, отправляемый в sed, который ломается как следующее:

s/^.*(//    substitute nothing for the beginning of any line (`^`) followed by anything up until an open-paren (`(`)
s/)$//      substitute nothing for a close-paren (`)`) followed immediately by the end of a line
2
08.09.2014, 00:33
2 ответа

Для того, чтобы включить расширение оболочки внутри скрипта, вы должны передать опцию командной строки bash, это можно сделать в самом скрипте:

#! /bin/bash
set -B   #enables expansion
set -X   #enables debugging

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

0
27.01.2020, 22:00

Во-первых, это поиск:

Чтобы найти все tar-файлы в каталоге, вам потребуется найти $ directory -iname «* .tar» Примечание: -iname является расширением gnu, поэтому если вы не используете gnu, вам придется сделать -name * .tar -o-name * .TAR это почти эквивалентно.

Теперь для добавления рабочей команды tar:

найдите $ directory -iname «* .tar» -print0 | xargs -0 -max-args = 1 tar xf

Все файлы tar будут извлечены в текущий рабочий каталог.

-121--217821-

Предположим, что сценарий можно изменить, вместо обязательных параметров (аргументов) следует использовать дополнительные параметры (параметры).

Если у вас есть каждый из первых 7 семи параметров в качестве опций, и они по умолчанию пустые последовательности то можно просто сделать:

./foo bar

Если вы используете POSIX-совместимую оболочку , вы можете использовать утилиту getopts или программу getopt . bash - как и большинство оболочек - предлагает getopts в качестве встроенного. Любой способ проще, чем свернуть собственный синтаксический анализатор командной строки.

Если вы не реализуете что-то вроде последних X непозиционных аргументов являются значениями для последних Y аргументов и X-Y опционных аргументов, вы должны предоставить последовательности опций перед каждой из 7 (теперь пустых) последовательностей, если вы хотите установить любой из них. Однако это не является обычной практикой, обычно вариант всегда является вариантом, а аргумент - аргументом, и порядок «вставки» варианта является свободным.

-121--32262-

Найдена моя собственная ошибка. Это должно было быть # !/bin/bash . Спасибо @ steeldriver за наконечник

4
27.01.2020, 22:00

Теги

Похожие вопросы