[英]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
:
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
然后這些情況。
情況3:
執行時:
. test
它等效於:
source test
source
是一個內置的Shell,它告訴外殼讀取給定的腳本文件並在當前Shell環境中執行命令。 但是,由於當前路徑或.
是不是在你的路徑,發現test
使用PATH
環境變量,它是/bin/test
。
/bin/test
實際上不是可以由source
讀取/執行的腳本文件; 它最終會讀取一個二進制文件,並且由於該文件是二進制文件而不是ascii文本文件而出錯,並且出錯了:
????: command not found
當您運行source date
或source 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.