jse*_*ksn 3 macos bash shell executable
(我在 OS X 10.11.4 上的终端应用程序中使用 bash 3.2。)
我的文件中有这一行.bashrc:alias ll='ls -alFh'
我跑去echo ll > test && chmod +x test创建一个test可执行文件。以下是运行多个命令的结果、它们的退出代码(通过echo $?)和stdout:
test
退出代码 1
不产生标准输出
./test
退出代码 127
产生./test: line 1: ll: command not found
. test
退出代码 127
产生-bash: ????: command not found
. ./test
退出代码 0
产生与手动运行相同的结果ll
我知道退出代码 1 是一般错误,退出代码 127 意味着shell 无法找到该命令。有人可以解释一下每种情况下发生的情况以及原因吗,包括标准输出的描述?我对 #3 与????.
首先你运行:
echo ll > test && chmod +x test
Run Code Online (Sandbox Code Playgroud)
那么这些案例。
案例3:
当你执行:
. test
Run Code Online (Sandbox Code Playgroud)
它相当于:
source test
Run Code Online (Sandbox Code Playgroud)
source是一个 shell 内置命令,它告诉 shell 读取给定的脚本文件并在当前 shell 环境中执行命令。但是,由于当前路径不在.您的路径中,因此它发现test使用PATH环境变量/bin/test.
/bin/test并不是真正可以通过source;读取/执行的脚本文件 它最终读取一个二进制文件并出错,因为该文件是二进制文件,而不是 ascii 文本文件,并且写入时出错:
????: command not found
Run Code Online (Sandbox Code Playgroud)
当您运行时,您将得到相同的行为source date,或者source ls因为这些都是二进制文件。
情况1:
您正在执行不带任何参数的 shell 内置命令test,使其以退出值退出:1
案例2:
当您运行时,./test它会尝试运行ll,但alias在生成的子 shell 中不可用,因此它找不到 alias ll。因此,它以退出值退出:127with ./test: line 1: ll: command not founderror on stderr。
案例4:
. ./testsource ./test与仅在当前 shell 中运行的相同。因此它能够找到您之前设置的别名,因此ll它运行别名命令ls -alFh并退出0
| 归档时间: |
|
| 查看次数: |
1640 次 |
| 最近记录: |