[英]Parent directory of a script
所以我是Linux的新秀,我需要一些幫助。 我必須編寫一個bash腳本,無論腳本在哪里,都必須在其中使用腳本的父目錄在其中創建文件。 它看起來應該像這樣:
如果我的腳本在“ / home / student /”中,則需要使用腳本內命令在/ home /中創建另一個名為txt的文件。 有什么想法嗎? 謝謝。
如果您希望能夠從任何地方運行腳本,則有一個微妙之處。
例如:如果您的腳本位於/home/myHome/someDir/someOther
,並且無論您在何時運行腳本, /home/myHome/someDir
在/home/myHome/someDir
創建文件。
要解決此問題,您只需要首先派生腳本所在的目錄即可。
可以使用以下方法完成:
SCRIPT_DIRECTORY="$(dirname "$0")"
touch "$SCRIPT_DIRECTORY/../myFile.txt"
編輯:實際上,如果要處理符號鏈接,它甚至可以更加微妙。 即:如果symlink /home/myHome/mySymlink
指向您的腳本,並且是實際被調用的腳本,則先前的腳本將考慮/home/myHome/
而不是/home/myHome/someDir/someOther
要處理這種情況,您可以
if [ -L "$0" ] && [ -x $(which readlink) ]; then
ACTUAL_SCRIPT_FILE="$(readlink -mn "$0")"
else
ACTUAL_SCRIPT_FILE="$0"
fi
SCRIPT_DIRECTORY="$(dirname "$ACTUAL_SCRIPT_FILE")"
touch "$SCRIPT_DIRECTORY/../myFile.txt"
使用..
指向父目錄。 因此,您可以使用以下方法創建文件
MY_SCRIPTDIR="$(dirname $0)"
touch ${MY_SCRIPTDIR}/../abc.txt
在命令提示符下或在Shell腳本中。
不幸的是,其他答案會為您提供當前的工作目錄,而不是腳本所在的目錄,或者如果腳本或沿途的目錄之一是符號鏈接而不是真實目錄,則這些答案將不起作用。
將起作用的是:
dirname $(readlink -f "$0")
說明:
readlink
將解決所有符號鏈接 dirname
僅從腳本的完整路徑中獲取目錄名稱-與手動查找斜線等相比,在極端情況下它更具可讀性和安全性。 現在,即使在復雜的情況下,您也將獲得正確的結果:如果腳本位於/tmp
並且在/tmp/abc/
創建了指向該腳本的符號鏈接,則當前目錄將為/home
並運行/tmp/abc/your-script
,它將正確輸出/tmp
,而不是/home
或/tmp/abc
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.