我正在尝试创建一个bash脚本,以便在我开发时在我的服务器上安装各种东西。想法是它在部署上运行,如果我更改服务器,我可以运行脚本,一切都会正常工作。
到目前为止,我有这个:
#!/bin/sh
apt-get update # To get the latest package lists
apt-get install imagemagick ghostscript
INI_LOC=echo php -i | grep 'php.ini' | grep 'Loaded Configuration File'
哪一半在那里。 $ INI_LOC现在具有值"已加载配置文件=> /etc/php/7.1/cli/php.ini"
我的问题是,如何将此变量更改为仅显示" /etc/php/7.1/cli/php.ini"?
下一步是使用此变量添加" extension = imagick.so"到php.ini文件,如果它还没有被添加。
任何帮助都将不胜感激。
答案 0 :(得分:0)
$ INI_LOC现在的值为“已加载的配置文件=> /etc/php/7.1/cli/php.ini“
我的问题是,如何将此变量更改为仅显示 “/etc/php/7.1/cli/php.ini”?
好像你只需要从INI_LOC
中删除“已加载的配置文件=>”字符串:
INI_LOC=`echo $INI_LOC | sed 's/Loaded Configuration File => //'`
答案 1 :(得分:0)
获取当前使用的php.ini
的文件名:
INI_LOC=$(php -i|sed -n '/^Loaded Configuration File => /{s:^.*> ::;p;q}')
然后,检查它是否有extention=imagick.so
:
sed -n 's:^[\t ]*::;/^;/d;/^$/d;s: *= *:=:;/extension="*imagick.so"*/{p;q}' <"$INI_LOC"
如果找不到extension=imagick.so
,请在使用[PHP]
sed -i~
块
sed -i~ '/^[\t ]*\[PHP\][\t ]*$/{s:$:\nextension=imagick.so:}' "$INI_LOC"
现在,结合以上所有内容:
INI_LOC=$(php -i|sed -n '/^Loaded Configuration File => /{s:^.*> ::;p;q}')
if [ -f "$INI_LOC" ]; then
FOUND=$(sed -n 's:^[\t ]*::;/^;/d;/^$/d;s:[\t ]*=[\t ]*:=:;/extension="*imagick.so"*/{p;q}' <"$INI_LOC")
if [ -z "$FOUND" ]; then
sed -i~ '/^[\t ]*\[PHP\][\t ]*$/{s:$:\nextension=imagick.so:}' "$INI_LOC"
fi
fi
sed -n '/^Loaded Configuration File => /{s:^.*> ::;p;q}')
:在该行的开头找到包含Loaded Configuration File =>
的行; print(p)然后退出(q)
s:^[\t ]*::;
:删除所有行开头的所有空格
/^;/d;/^$/d;
:删除(跳过)空行和注释行
s:[\t ]*=[\t ]*:=:;
:删除等号周围的所有空格
/extension="*imagick.so"*/{p;q}
:如果找到extensions=imagick.so
或extensions="imagick.so"
,则打印(p)该行并退出(q)
sed -i~ '/^[\t ]*\[PHP\][\t ]*$/{s:$:\nextension=imagick.so:}' "$INI_LOC"
:在extension=imagick.so
区块中插入[PHP]
抱歉我的英语不好,因为我不是说英语的人。