簡體   English   中英

腳本的父目錄

[英]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")

說明:

  • 在命令行中輸入腳本時,“ $ 0”是腳本的名稱。 對於包含空格的情況,報價很重要。
  • readlink將解決所有符號鏈接
  • dirname僅從腳本的完整路徑中獲取目錄名稱-與手動查找斜線等相比,在極端情況下它更具可讀性和安全性。

現在,即使在復雜的情況下,您也將獲得正確的結果:如果腳本位於/tmp並且在/tmp/abc/創建了指向該腳本的符號鏈接,則當前目錄將為/home並運行/tmp/abc/your-script ,它將正確輸出/tmp ,而不是/home/tmp/abc

暫無
暫無

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

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