2014-01-06 3 views
1

Hullo iam пытается написать скрипт bash, чтобы клонировать мой репозиторий, а затем запускать тесты с использованием селена. когда я пытаюсь установить селеновые зависимости, особенно когда я запускаю эту команду (Xvfb: 99 -ac & export DISPLAY =: 99) в коде, я получаю сообщение об ошибке (Unrecognized option: &). Это часть моего кодаBash Script не распознает «&»

xvfbb="sudo apt-get install -y xvfb" 
enn="Xvfb :99 -ac & export DISPLAY=:99" 
magic="sudo apt-get install -y imagemagick" 
*#Function to call installation variables* 

    function seleniumTests() { 
    $xvfbb 
    $enn 
    $magic 
    echo "done installing dependencies." 
    } 

Я тогда называть выше функции (seleniumTests), когда я закончить клонированию. Любая идея, почему «&» распознается как ошибка?. Спасибо

ответ

1

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

xvfbb() { sudo apt-get install -y xvfb; } 
enn() { Xvfb :99 -ac & export DISPLAY=:99; } 
magic() { sudo apt-get install -y imagemagick; } 
function seleniumTests() { 
    xvfbb 
    enn 
    magic 
    echo "done installing dependencies." 
} 
+0

Да, это способ сделать это _properly_. Но, может быть, команды читаются из текстового файла или поступают из базы данных или аналогичных, поэтому, возможно, они _need_ являются строками. Если это так (требование строки), мой ответ - это решение, иначе я бы предпочел это здесь. – Alfe

+0

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

+0

Har har ;-) Вызов «произвольной строки» никоим образом не опасен, чем вызов «произвольной функции» (что точно так же опасно). Ваше предупреждение имеет смысл, но не ограничивает его. Если строки заданы непосредственно в сценарии OP, они не являются опасными (не более, чем остальная часть кода). Если код должен поступать из базы данных (или аналогичной), то использование этого в качестве источника кода является проблемой безопасности. – Alfe

0

вещи, как & (есть еще некоторые) не оцениваются, когда переменная расширяется.

Для его непосредственной оценки используйте eval; то я предлагаю использовать котировки вокруг переменных:

eval "$enn" 
+0

Спасибо @chepner за решение. Ваш на самом деле продвинутый. я получил работу, разделив команду на две части: enn = "Xvfb: 99 -ac" exp = "export DISPLAY =: 99", а затем внутри функции $ enn & $ exp . Но ваш кажется более чистым, поэтому я тоже буду интегрировать ваши изменения. Спасибо, парни –

Смежные вопросы