這個問題在這里已經有了答案: 當前作業目錄到底是什么? (5 個回答) 如何從腳本本身中獲取 Bash 腳本的源目錄? (74 個回答) 3 小時前關閉。
問題是我撰寫了一個處理檔案的 bash 腳本。如果我將此腳本添加到 bashrc,我將找不到該檔案。我可以寫絕對路徑,但我想壓縮目錄并將其發送給其他人。如果因為路徑沒有人可以使用我的腳本,那可能會很糟糕。該專案看起來像:DIR A
- 腳本
- 自述檔案
- 目錄 B
- Python 腳本
- 檔案
腳本呼叫 Python 腳本和從檔案中讀取的 Python 腳本。我想從任何地方將腳本稱為環境變數,但我不能,因為它找不到 Python 腳本和檔案。有沒有辦法像在 DIR B 旁邊的目錄中一樣呼叫腳本?就像一個真實的路徑,或者我不知道。
uj5u.com熱心網友回復:
我想我已經解決了這個問題。它不是那么優雅,但它確實有效。我不想使用“cd”,因為我認為 cd 到檔案夾 cd back 有點難看...在 bash 腳本中,我使用dirname $0獲取腳本路徑并與其他檔案路徑連接,例如:
path=`dirname $0`
scriptpath="$path/dirB/python.py"
filepath="$path/dirB/file"
我將 $filepath 作為引數提供給 python 腳本,它的作業方式如下:(在腳本呼叫 python 函式中)
python3 $scriptpath $filepath $@
我可以在 Python 腳本中讀取檔案,例如:
f = open(sys.argv[1], "r")
謝謝大家的回答!祝你今天過得愉快!
uj5u.com熱心網友回復:
如果 bash 腳本是有源的,它總是
scriptname=$(realpath "$BASH_SOURCE")
因此,源 bash-script 的目錄總是
dir=$(dirname "$scriptname")
一個簡單的
cd "$dir"
在呼叫 python 腳本之前可以解決問題。
請注意,如果您不獲取腳本,"$BASH_SOURCE"則將為空。您可以對此進行測驗以確保腳本的來源:
if [ "$BASH_SOURCE" = "" ] ; then
echo "This script should be sourced, not executed"
fi
uj5u.com熱心網友回復:
chmod x my_script.sh # make it executable
# create a link in your bin folder
sudo ln -s /usr/local/bin/my_script.sh $(pwd)/my_script.bat
你要確保你的腳本以 shebang 開頭
#! /bin/bash
最后呼叫它
$ my_script.sh some arguments 5
代替
$ . my_script.sh
或者
$ source my_script.sh
您可以創建一個安裝方法來為您的程式的其他用戶執行所有這些步驟...
但這聽起來有點像 x/y 問題(即,這可以滿足您的問題,但可能無法解決您的潛在問題)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486478.html
