2017-02-11 2 views
2

Мне нужно передать дополнительные исходные параметры, а также добавить некоторые другие. Что-то вроде этого:Добавить параметры bash и перейти к другому скрипту

#!/bin/bash 
params="-D FOREGROUND" 
params+=" -c Include conf/dev.conf" 

/usr/local/apache/bin/apachectl $params "[email protected]" 

Этот код выше не работает, как ожидалось, если params содержит два или более параметров, рассматриваются как один параметр.

+0

Я немного изменил свой вопрос. 'params' обрабатывается как один параметр – SLY

+0

В приведенном выше примере я хочу, чтобы' params' рассматривался как два параметра + некоторые параметры $ @ – SLY

ответ

4

код в вашем примере должен работать, если следующая команда действительна при выполнении в командной строке, написанной именно так:

/usr/local/apache/bin/apachectl -D FOREGROUND -c Include conf/dev.conf "[email protected]" 

Быстрый поиск веба приводит меня к мысли, что вы хотите это (обратите внимание на дополнительные двойные кавычки):

/usr/local/apache/bin/apachectl -D FOREGROUND -c "Include conf/dev.conf" "[email protected]" 

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

#!/bin/bash 
declare -a params=() 
params+=(-D FOREGROUND) 
params+=(-c "Include conf/dev.conf") 

/usr/local/apache/bin/apachectl "${params[@]}" "[email protected]" 

params массив содержит 4 строки ("-D", "FOREGROUND", "-c" и "Include conf/dev/conf"). Расширение массива ("${params[@]}", обратите внимание, что здесь важны двойные кавычки) расширяет их до этих 4 строк, как если бы вы написали их с двойными кавычками вокруг них (т. Е. Без дальнейшего разбиения слов).

Использование массивов с таким расширением является гибким и надежным способом создания команд, а затем выполняется с простым расширением.

0

Если проблема заключается в пробеле в параметре «-c Include conf/dev.conf», вы можете просто использовать обратное пространство для сохранения символа пробела: params + = "- c Include \ conf/dev.conf"