簡體   English   中英

當使用源(相同的shell)或bash(子shell)調用腳本時,如何從腳本中讀取當前文件夾?

[英]How to read the current folder from a script when it's called with source (same shell) or bash (subshell)?

這是一個很難的問題,因為我研究了幾個小時但找不到可行的解決方案,所以我結合了一些我找到的解決方案,結果如下:

"$( cd "$( dirname "${BASH_SOURCE[0]}" )" && dirname -- "$(readlink -f -- "$0")" )"

如果有人有更簡單的,請分享,否則,享受!

我不認為 bash 的解決方案適用於任何情況(例如通過鏈接獲取文件時),但這種方法可能在大多數情況下都有效:

${BASH_SOURCE[0]}包含腳本的名稱,包括 PATH 組件,以它被調用的方式。 如果它是通過$PATH搜索調用的,則它包含相應的 PATH。 因此, dirname "${BASH_SOURCE[0]}"將是腳本所在的目錄(相對路徑或絕對路徑)。 因此, readlink -f -- $(dirname "${BASH_SOURCE[0]}")將 output 該目錄的絕對路徑。 因此,在同一目錄中找到other_script將是:

source "$(readlink -f -- $(dirname "${BASH_SOURCE[0]}"))/other_script" # bash

您也為zsh標記了您的問題。 在 Zsh 中,事情要簡單一些。 您在$0中找到您的腳本(加上目錄部分)。 因此返回目錄的絕對路徑$0:A ,給你

source $0:A/other_script # zsh

當然,如果您只需要此信息來獲取其他腳本,則不需要獲取other_script絕對路徑。 相對路徑也可以。

暫無
暫無

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

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