簡體   English   中英

".filename" 從 /bin/sh 運行時找不到文件,從 /bin/bash 運行; 為什么?

[英]". filename" can't find file when run from /bin/sh, works from /bin/bash; why?

我的簡單腳本是這樣的:

#!/bin/sh


DEF=.file_name_with_a_leading_dot.sh

. ${DEF}

注意最上面一行的 /bin/sh。 當我運行那個簡單的腳本時,我得到一個找不到文件的錯誤。 但是,如果我將第一行更改為 #!/bin/bash,那么腳本會在當前目錄中找到該文件就可以了。

但是,在我的 Ubuntu linux 筆記本電腦上,我看到 /bin/sh 是 /bin/bash 的符號鏈接。 那么,為什么我的腳本表現不同呢?

另外,我可以像這樣運行腳本:

/bin/bash ./script.sh

沒關系。

那么,我錯過了什么?

手冊頁

. 文件名 [參數]

source filename [arguments]在當前 shell 環境中從 filename 讀取並執行命令,並返回從 filename 執行的最后一個命令的退出狀態。 如果文件名不包含斜杠,則使用 PATH 中的文件名來查找包含文件名的目錄。 在 PATH 中搜索的文件不必是可執行文件。 當 bash 不處於 posix 模式時,如果在 PATH 中沒有找到文件,則搜索當前目錄。 如果 shopt 內置命令的 sourcepath 選項關閉,則不會搜索 PATH。 如果提供了任何參數,它們將在執行 filename 時成為位置參數。 否則位置參數不變。 返回狀態是腳本中退出的最后一個命令的狀態(如果沒有執行任何命令,則返回 0),如果找不到文件名或無法讀取文件名,則返回 false。

因此,shebang #!/bin/sh似乎將您的 bash 設置為 posix 模式。 在這種模式下,只評估PATH ,而不是當前目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM