Поиск файла журнала для строки с помощью скрипта bash - PullRequest
4 голосов
/ 18 сентября 2011

Я только начал изучать PHP.Я следую phpacademy учебникам, которые я бы порекомендовал всем.В любом случае, я использую XAMPP для проверки своих скриптов.Я пытаюсь написать bash-скрипт, который запустит XAMPP, а затем откроет firefox на странице localhost, если найдет определенную строку «XAMPP для Linux запущена», которая была перенаправлена ​​с терминала в файл xampp.log.У меня проблема с поиском файла.Я продолжаю получать:

grep: for: No such file or directory

Я знаю, что файл существует, я думаю, что мой синтаксис неправильный.Это то, что у меня так далеко:

loaded=$false
string="XAMPP for Linux started."

echo "Starting Xampp..."

sudo /opt/lampp/lampp start 2>&1 > ~/Documents/xampp.log

sleep 15

if grep -q $string ~/Documents/xampp.log; then

    $loaded=$true
    echo -e "\nXampp successfully started!"

fi

if [$loaded -eq $true]; then

    echo -e "Opening localhost..."
    firefox "http://localhost/"

else

    echo -e "\nXampp failed to start."
    echo -e "\nHere's what went wrong:\n"
    cat ~/Documents/xampp.log

fi

Ответы [ 3 ]

4 голосов
/ 18 сентября 2011

В сценариях оболочки вы не должны писать $variable, так как это сделает расширение слова для значения переменной. В вашем случае это приводит к четырем словам.

Всегда используйте кавычки вокруг переменных, например:

grep -e "$string" file...

-e необходим, когда строка может начинаться с тире, а кавычки вокруг строки сохраняют его как one word.

Кстати: когда вы пишете программы оболочки, первая строка должна быть set -eu. Это позволяет * e * проверять ошибки и проверять * u * неопределенных переменных, что будет полезно в вашем случае. Для более подробной информации читайте руководство Bash.

1 голос
/ 18 сентября 2011

Есть несколько проблем:

  • заключите в кавычки переменные, если вы хотите передать их в качестве простого аргумента "$string"
  • нет $true и $false
  • bash выполняет расширение переменных, заменяет имена переменных их значениями перед выполнением команды.$loaded=$true должно быть loaded=true.
  • вам нужны пробелы и обычно кавычки в if: if [$loaded -eq $true] if [ "$loaded" -eq true ].в этом случае переменная установлена ​​так, что она не вызовет проблем, но в общем случае не полагайтесь на это.
1 голос
/ 18 сентября 2011

Вы ищете строку, которую следует поставить в кавычки.
Попробуйте "$string" вместо $string

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