Aug27

【原创】关于shell中变量作用域的思考

Author: leeon  Click: 739   Comments: 0 Category: linux  Tag: shell,linux

执行一个shell脚本会在当前shell中派生一个子shell去执行任务。同理,如果一个shell脚本中调用另一个shell,也是会在执行到子shell这一步的时候再次派生一个子shell去处理脚本。例如a.sh脚本有如下信息:

[code="bash"]
#!/bin/bash
echo $$
./b.sh
[/code]

b.sh中有:

[code="bash"]
#!/bin/bash
echo $$
[/code]

执行a.sh会发现输出两行不同的进程ID,验证了每个sh在执行的时候会派生一个子shell去执行任务。

在脚本之间调用我们或许会遇到变量之间的调用关系,这里我们需要注意一下几个场景的应用:

场景1, 当前shell中创建一个变量传递给当前脚本派生的子shell,例如:

a.sh

[code="bash"]
#!/bin/bash
a="TEST"
./b.sh
[/code]

b.sh

[code="bash"]
#!/bin/bash
echo $a
[/code]

这时会发现在b.sh中是无法正常获取到a的变量值的,那么我们可以利用export命令或者set -a命令来使当前shell的变量激活到派生的子shell中。

我们只需要在a.sh中加入

[code="bash"]
#!/bin/bash
export a="TEST"
[/code]

或者

[code="bash"]
#!/bin/bash
set -a
a="TEST"
[/code]

 

场景2,派生的子shell中的变量在当前父shell中使用,例如:

a.sh

[code="bash"]
#!/bin/bash
./b.sh
echo $b
[/code]

b.sh

[code="bash"]
#!/bin/bash
b="TEST"
[/code]

我们来执行a.sh会发现输出的b变量为空。那么我们可以使用source命令或者.(点号)来激活子shell中的变量使其能在父shell中使用。

我们只需要修改a.sh,在调用b.sh前加上特殊命令或字符即可,例如:

[code="bash"]
#!/bin/bash
. ./b.sh
#或者
source ./b.sh
[/code]

Aug16

【原创】为PHP增加LDAP扩展模块支持

Author: leeon  Click: 1040   Comments: 0 Category: php  Tag: php,ldap,so,ldap2-devel

今日需要部署一套ldap的测试环境,但发现现有php并不支持ldap模块,遂打算重新编译so,但这种方式比较麻烦并且繁琐,如果仅仅是增加一个ldap模块可以通过phpize和configure的方式编译外挂加载ldap的so文件来使php支持ldap扩展拓展。

第一步是找到当前运营环境的php版本,并将此版本的源码包放入运营机器某个目录,解压。

第二步

[code="bash"] cd /xxx/xxx/php-5.2.17/ext/ldap/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-ldap[/code]

但是检查过程异常退出,提示如下错误:

 [code="bash"]
checking for LDAP support... yes, shared
checking for LDAP Cyrus SASL support... no
checking for 3 arg ldap_set_rebind_proc... yes
checking for ldap_parse_result... no
checking for ldap_parse_reference... no
checking for ldap_start_tls_s... no
checking for ldap_bind_s... no
configure: error: LDAP build check failed. Please check config.log for more information.
[/code]

始终验证不通过,这时候排查openldap2-devel版本,以为此版本比较老,就往高版本升级,但是依旧是同样的错误,最终排查觉得有可能是openldap2-client的版本和openldap2-devel版本不一致导致,于是在网上找了一个和client版本完全匹配的devel rpm包,重新configure顺利通过校验。这个问题比较奇怪,通常情况下编译php是不需要开发包和二进制包版本完全一致,但ldap的编译却需要client和devel包版本完全一致。 

记得在make ,make install之后在php.ini上将ldap.so写入extension扩展配置中。

Aug14

【原创】SQUID学习笔记

Author: leeon  Click: 565   Comments: 0 Category: 其他  Tag: squid

no_cache deny xxxx

表示拒绝缓存xxxx对象

 

SQUID集群中ICP协议(默认端口:3130)是牺牲时间为代价,每次Miss的请求都要等ICP返回才能判断是否转发请求。

Digest是牺牲空间换事件为代价,将邻居cache的数据的摘要信息下载到本地,判断miss的请求是否在邻居cache中存在

HTCP协议(默认端口:4827)相比ICP协议更加复杂,ICP查询仅包括URI,而HTCP查询支持完整的HTTP请求头部。

 

查看squid debug日志最佳方式:

squid -k debug; sleep 5; squid -k debug

此命令可以重复使用,第一次使用是开启,第二次调用则关闭

 

SQUID日志中关于请求URI的记录默认情况是去掉“?”号后面的内容的,如果要记录完整的URI信息,需要在配置文件中加上:

strip_query_terms off

Aug9

中国邮政EMS就是一坨屎

Author: leeon  Click: 874   Comments: 1 Category: 生活  Tag: ems,中国邮政速递

京东上6号买的东西,7号就从武汉仓库发货到中国邮政武汉分公司,就一个同城邮政快递搞了3天?还两次错发?国家邮政就这熊样?事业单位真tmd操蛋,不好好工作在这里玩弄老百姓?

另外中国邮政你那个验证码,从来没有一次输入验证ok过,不知道是不是我眼花了,操蛋的ems。

上图不解释。

分类

标签

归档

最新评论

王爷在21:32:04评论了
【原创】获取jQuery中Ajax函数的返回值的方法
Funny在10:22:51评论了
shell数组使用方法小记
kevinems在11:30:08评论了
【原创】使用gitosis和tortoisegit打造自己的git服务
candy在13:11:40评论了
【原创】beautifulsoup解析中文网页乱码解决
thenbsp.com在16:17:48评论了
中国邮政EMS就是一坨屎

我看过的书

链接

其他

访问本站种子 本站平均热度:1218 c° 本站链接数:55 个 本站标签数:250 个 本站被评论次数:33 次