“之间的区别是什么?”;。文件";及"/文件";在Linux bash shell中?
当“文件”是可执行文件时,它们之间的区别是什么“之间的区别是什么?”;。文件";及"/文件";在Linux bash shell中?,linux,bash,Linux,Bash,当“文件”是可执行文件时,它们之间的区别是什么 $ ./file 及 在Linux bash shell中?是源代码的别名:它将在当前bash进程中执行作为其参数的文件,就像您直接在命令行中键入文件一样 /file只是给出一个文件的路径;在这种情况下,文件将根据文件的类型作为子进程启动,如果是文本文件,则根据文件的hashbang启动。如果文件的第一行是#/bin/bash,它将作为一个新的bash进程启动它 /这里只说文件在当前目录中。说cd/bin/ls与说/bin/ls没有什么不同(除了
$ ./file
及
在Linux bash shell中?
是源代码的别名:它将在当前bash进程中执行作为其参数的文件,就像您直接在命令行中键入文件一样
/file
只是给出一个文件的路径;在这种情况下,文件将根据文件的类型作为子进程启动,如果是文本文件,则根据文件的hashbang启动。如果文件的第一行是#/bin/bash
,它将作为一个新的bash进程启动它
/
这里只说文件在当前目录中。说cd/bin/ls
与说/bin/ls
没有什么不同(除了我们在一个目录中更改当前目录而不是在另一个目录中更改这一事实)。我们必须指定当前目录而不能简单地给出文件名的原因是,如果没有指定目录,bash只在路径中查找要执行的程序,而在类Unix系统中,当前目录通常不在路径中。由于/bin
位于路径中,因此简单的ls
通常相当于/bin/ls
如果你想定义变量的话,差别是非常明显的。任何环境变量仅适用于当前流程及其子流程;因此,如果在子流程中定义环境变量,则调用流程将无法访问它
例如,假设您有一个名为testvar.sh
的文件:
#!/bin/bash
what=world
如果执行此操作,将不会设置变量:
./testvar.sh ; echo Hello, $what
# => Hello,
但如果你这样做,你会:
. testvar.sh ; echo Hello, $what
# => Hello, world
另一个明显的区别是,因为
执行bash命令,所以它只在包含bash脚本的文件上工作。因此,cd/bin/ls
将执行ls
程序;但是cd/bin。ls
将失败并出现错误
. testvar.sh ; echo Hello, $what
# => Hello, world