脚本第一行

曾经遇到一个perl脚本,想在启动perl前置一个环境变量:

test.pl:

#!/usr/bin/env LC_CTYPE=zh_CN.UTF-8 perl
print "hello/n"

perl test.pl 可以正常运行,./test.pl就不会正常执行,且不会退出。

strace 可以看到程序在不停的 execve("./test.pl", ["./test.pl"]

 

原因就在于linux上脚本第一行解释器之后只能有一个参数,如果有多个也只做为一个。

 

直接运行 ./test.pl 相当于

/usr/bin/env "LC_CTYPE=zh_CN.UTF-8 perl" ./test.pl

evn会先设置LC_CTYPE="zh_CN.UTF-8 perl"这样一个环境变量,然后运行 ./test.pl,这就回到了最开始,于是一不断重复这个过程,不退出。

 

perl test.pl 可以正常运行是因为对于perl解释器来说,第一行只是一行注释。

 

切记切记:linux上脚本第一行解释器之后的参数都将做为一个参数传入到解释器中。

 

ps:

其实不认为第一行写 #!/usr/bin/evn interpreter 这种方法好,因为这种方法对于 awk, expect 等要加一个 -f 来指明脚本的就不好使了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值