Linux中的source命令


5

我的问题是:
为什么我运行一些带有名称别名的文件,例如:

alias lsa="ls -a" 

直:

$ ./aliases

它不创建别名(可能只在脚本上下文中)。
但如果我用命令“source”运行它:

$ source aliases

它做的工作?我的意思是在执行命令shell的上下文中存在别名“lsa”之后?
“man source”给出:“没有手动输入源代码”,在google中我发现它运行Tcl,但为什么Tcl会影响shell上下文而不是灌木丛?

Answers:


7

基本上是因为当你跑步 ./aliases,它创建了一个存在别名的过程,但在你之后立即结束 source 它适用于您当前的bash过程。

获得帮助 source,你需要阅读 man bash。 为了省你省事:

source filename [arguments]
    Read and execute commands from filename in the current shell environment
    and return the exit status of the last command executed from filename.
    If filename does not contain a slash, file names in PATH are used to find
    the directory containing filename. The file searched for in PATH need not
    be executable. When bash is not in posix mode, the current directory is
    searched if no file is found in PATH. If the sourcepath option to the shopt
    builtin command is turned off, the PATH is not searched. If any arguments
    are supplied, they become the positional parameters when filename is
    executed. Otherwise the positional parameters are unchanged. The return
    status is the status of the last command exited within the script (0 if
    no commands are executed), and false if filename is not found or cannot
    be read.

2
要么 man csh, 作为适当的。
Scott

5

当您将其作为可执行脚本运行时,shell会将其自身的副本分叉为子进程以运行该脚本。这意味着对别名的任何更改:

  • 只会被那个孩子看到。
  • 一旦孩子退出就会丢失。

相比之下,当你 source 剧本:

  • 它在同一个进程中运行(就像你只是键入其内容一样)
  • 保留对别名的更改。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.