У меня есть немного кода, который имеет одну команду, которая отлично работает на терминале, но не работает при запуске из скрипта - PullRequest
0 голосов
/ 02 июля 2019

Показанный скрипт не запускается при последней команде.

Команда работает нормально, когда запускается индивидуально в терминале. Я пытался поместить часть! ... в параметр, перемещая его, используя различные скобки и разрывы строк и даже используя полные пути. Меня не интересуют альтернативные решения - меня интересует, почему это решение не работает конкретно в сценарии.

    #!/bin/bash
    mkdir alllogs
    for i in $(locate *.log); do cp $i alllogs/; done
    tar -zcvf alllogs/logs.gz alllogs/*
    rm -v alllogs/!('logs.gz') 

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

    ./x.sh: line 7: syntax error near unexpected token `('
    ./x.sh: line 7: `rm -v alllogs/!('logs.gz')'

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Что сказал винтнес, или замените

$(locate *.log) 

на

`locate *.log`
0 голосов
/ 02 июля 2019

Эта форма сопоставления с шаблоном не включена по умолчанию. Вам нужно явно установить extglob.

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