Файл настроек для bash и php
У меня есть проект, который включает в себя сценарии php и bash.
Я хочу передать все пользовательские настройки в файл "settings.conf". Следовательно, этот файл должен содержать переменные bash, а также переменные php.
Тем не менее, bash счел бы php-код довольно раздражающим, так как php не может справиться с bash-кодом.
Что было бы лучше, чтобы мой php-скрипт заботился только о php-части файла, а bash - только о bash-части?
Файл настроек может выглядеть так
### Settings-File
## php-settings
<$php
$language = "en";
$url = "http://foo.bar";
$copyright = "Copyleft License";
?>
## end php-settings
## bash-settings
pathToCertainFile="/home/johndo/files/certainFile"
## end bash-settings
## EOF
2 ответа
Вместо того чтобы использовать один файл настроек, который будет анализироваться PHP и Bash, вы должны сохранить ваши настройки в формате, который имеет смысл для ваших настроек, и прочитать этот файл, используя оба сценария. Это не должно быть исполняемым. Это просто должно содержать ваши настройки.
settings.conf:
foo="this"
bar="that"
someint=123
Сценарий bash может выглядеть так:
#!/usr/local/bin/bash
eval `egrep '^[a-z]+=("[a-z0-9]+"|[0-9]+)$' settings.conf`
printf "foo=%s\nbar=%s\nsomeint=%s\n\n" "$foo" "$bar" "$someint"
Обратите внимание, что это вообще плохая идея eval
, В bash есть и другие (лучшие) решения. Я сделал это для удобства.
И скрипт PHP может выглядеть так:
#!/usr/local/bin/php
<?php
$fh=fopen("settings.conf", "r");
while ($line=fgets($fh, 80)) {
if (preg_match('/^[a-z]+=("[a-z0-9]+"|[0-9]+)$/', $line)) {
$line_a=explode("=", $line);
$conf[$line_a[0]]=$line_a[1];
}
}
print_r($conf);
И эти примеры действительно работают:
ghoti@pc $ ./doit
foo=this
bar=that
someint=123
ghoti@pc $ ./doit.php
Array
(
[foo] => "this"
[bar] => "that"
[someint] => 123
)
ghoti@pc $
Speendo, почему вы хотите запускать свои задания cron, используя bash? Просто сохраните настройки в формате PHP и используйте PHP-скрипты, такие как ghoti's doit.php
выше. PHP является совершенно правильным скриптовым языком для shell и cron.