bash: ????: 找不到命令
bash: ????: command not found
(我在 OS X 10.11.4 上的终端应用程序中使用 bash 3.2。)
我的 .bashrc
文件中有这一行:alias ll='ls -alFh'
I 运行 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 表示 the shell can't find the command。请有人解释在每种情况下发生了什么以及为什么,包括标准输出的描述?我对 #3 中的 ????
.
特别困惑
首先你运行:
echo ll > test && chmod +x test
然后这些案例。
案例三:
当你执行:
. test
相当于:
source test
source
是一个 shell 内置命令,它告诉 shell 读取给定的脚本文件并在 当前 shell 环境中执行命令。但是,由于 当前路径 或 .
不在您的路径中,它会使用 PATH
环境变量 /bin/test
找到 test
。
/bin/test
并不是真正的脚本文件,可以被source
read/executed;它最终读取一个二进制文件并出错,因为该文件是一个二进制文件,而不是一个 ascii 文本文件并且出错写入:
????: command not found
当您 运行 source date
或 source ls
时,您将得到相同的行为,因为这些都是二进制文件。
案例一:
您正在执行 shell 内置 test
,没有任何使其退出的参数,退出值:1
案例二:
当你 运行 ./test
它试图 运行 ll
并且 alias
在生成的子 shell 中不可用因此它找不到别名 ll
。由于这个事实,它以退出值退出: 127
with ./test: line 1: ll: command not found
error on stderr
.
案例四:
. ./test
与 source ./test
相同,仅当前 shell 中的 运行。因此,它能够找到您之前为 ll
设置的别名,因此它 运行 的别名命令 ls -alFh
并以 0
退出
(我在 OS X 10.11.4 上的终端应用程序中使用 bash 3.2。)
我的 .bashrc
文件中有这一行:alias ll='ls -alFh'
I 运行 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 表示 the shell can't find the command。请有人解释在每种情况下发生了什么以及为什么,包括标准输出的描述?我对 #3 中的 ????
.
首先你运行:
echo ll > test && chmod +x test
然后这些案例。
案例三:
当你执行:
. test
相当于:
source test
source
是一个 shell 内置命令,它告诉 shell 读取给定的脚本文件并在 当前 shell 环境中执行命令。但是,由于 当前路径 或 .
不在您的路径中,它会使用 PATH
环境变量 /bin/test
找到 test
。
/bin/test
并不是真正的脚本文件,可以被source
read/executed;它最终读取一个二进制文件并出错,因为该文件是一个二进制文件,而不是一个 ascii 文本文件并且出错写入:
????: command not found
当您 运行 source date
或 source ls
时,您将得到相同的行为,因为这些都是二进制文件。
案例一:
您正在执行 shell 内置 test
,没有任何使其退出的参数,退出值:1
案例二:
当你 运行 ./test
它试图 运行 ll
并且 alias
在生成的子 shell 中不可用因此它找不到别名 ll
。由于这个事实,它以退出值退出: 127
with ./test: line 1: ll: command not found
error on stderr
.
案例四:
. ./test
与 source ./test
相同,仅当前 shell 中的 运行。因此,它能够找到您之前为 ll
设置的别名,因此它 运行 的别名命令 ls -alFh
并以 0