簡體   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