shilei0619
2016-08-05 08:43
采纳率: 100%
浏览 1.9k
已采纳

Linux source命令问题

问大家一个关于source命令很基础的问题,我一直对这个命令比较模糊。什么情况下执行一个sh脚本不适用source命令?
我今天source ./A.sh 一直提示无法执行二进制文件,而直接./A.sh就可以运行。都知道这个命令可以用于配置当前环境变量,但是却不清楚不适用的情形或者是会带来什么问题。在线求解答!!!

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • shilei0619 2016-08-05 12:27
    已采纳

    我想我找到答案了。实际上Source相当于execute that reading from the file . 所以它并不要求file可执行,因为它只是从file读出来然后在当前shell prcess执行。不过它要求file必须是有效的shell script!!!

    打赏 评论
  • pxinm 2016-08-05 09:04

    source命令用法:
    source FileName
    作用:在当前bash环境下读取并执行FileName中的命令。
    注:该命令通常用命令“.”来替代。
    如:source .bash_rc 与 . .bash_rc 是等效的。
    注意:source命令与shell scripts的区别是,
    source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

    我写了一个 test.sh 内容是这样的
    ls
    cd /var/log
    pwd
    执行结果为
    bin etc games include lib lib64 libexec local pgsql-9.3 sbin share src tmp
    /var/log
    然后再执行pwd结果如下
    [logview@gitlab usr]$ pwd
    /usr

    而source+pwd之后结果如下
    bin etc games include lib lib64 libexec local pgsql-9.3 sbin share src tmp
    /var/log
    [logview@gitlab log]$ pwd
    /var/log

    source 直接改变了路径

    打赏 评论

相关推荐 更多相似问题