2013-12-10 35 views
7

我用一个脚本,test.sh,由别人写的,开始一个bash家当:猛砸家当-l选项

#!/bin/bash -l 
... 
echo TEST: $TEST 

从我能看到的,这有脚本中使用的变量的影响:

  • ,如果我跑TEST=hey ./test.sh,我可以看到TEST: hophop是可变TEST在我.bash_profile
  • 的价值,这是相同的,如果我export TEST=hey运行脚本
  • 但在此之前,如果我删除-l标志,同样的命令返回TEST: hey,因为我本来期望

有人可以解释这种现象? bash的帮助没有帮助。

回答

15

-l选项(根据man page)使“bash的行为就好像它已被调用为登录shell”。登录shell从您的主目录读取某些初始化文件,例如.bash_profile。由于您在.bash_profile中设置了TEST的值,因此在启动bash时,您在命令行上设置的值将被覆盖。

+0

好的,谢谢! – Emmanuel