繁体   English   中英

bash:????:找不到命令

[英]bash: ????: command not found

我在OS X 10.11.4的Terminal应用程序中使用bash 3.2。

我的.bashrc文件中有以下行: alias ll='ls -alFh'

我运行echo ll > test && chmod +x test创建一个test可执行文件。 以下是运行多个命令,其退出代码(通过echo $? )和stdout

  1. test
    退出代码1
    不产生标准输出

  2. ./test
    退出代码127
    产生./test: line 1: ll: command not found

  3. . test
    退出代码127
    产生-bash: ????: command not found

  4. . ./test
    退出代码0
    产生与手动运行ll相同的结果

我知道退出代码1是一个通用错误,退出代码127意味着Shell无法找到该命令 有人能解释一下每种情况下发生的情况以及原因,包括对标准输出的描述吗? 我对#3感到特别困惑????

首先,您运行:

echo ll > test && chmod +x test

然后这些情况。

情况3:

执行时:

. test

它等效于:

source test

source是一个内置的Shell,它告诉外壳读取给定的脚本文件并在当前Shell环境中执行命令。 但是,由于当前路径. 是不是在你的路径,发现test使用PATH环境变量,它是/bin/test

/bin/test实际上不是可以由source读取/执行的脚本文件; 它最终会读取一个二进制文件,并且由于该文件是二进制文件而不是ascii文本文件而出错,并且出错了:

????: command not found

当您运行source datesource ls时,您将得到相同的行为,因为它们都是二进制文件。

情况1:

您正在执行shell内置test而没有任何使其退出并带有退出值的参数: 1

情况2:

当您运行./test它将尝试运行ll并且alias在生成的子外壳中不可用,因此无法找到别名ll 因此,它以退出值退出: 127带有./test: line 1: ll: command not found stderr./test: line 1: ll: command not found stderr

情况4:

. ./test . ./test与仅在当前shell中运行的source ./test相同。 因此,它能够找到您之前为ll设置的别名,因此它将运行别名命令ls -alFh并以0退出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM