簡體   English   中英

如何使我的BASH腳本知道保存的路徑

[英]How to make my BASH script know the path that is saved

我要編寫一個腳本,當您運行它時,它將創建一個包含用戶計算機詳細信息的html頁...但是我只有一個問題...如果用戶將該腳本放在一個文件夾中並將其設置為cronjob ,當crontab執行該腳本時,該腳本會在主目錄中創建一個文件夾,這很不好,因為我希望該腳本使用HTML文檔位於與該腳本相同的目錄來創建該文件夾...我該怎么辦? ?

thnx ;-)

我通常會執行以下操作:

#!/bin/bash
# sample script to change directory and save a file
WORKDIR=/home/file/n34_panda
cd $WORKDIR

echo "this "> newfile.txt

這是一個簡單的答案,而無需查看其余代碼。 老實說,最簡單的方法就是添加以下命令:

cd /path/to/html/docs

然后,您可以添加其余代碼

從幾個目錄嘗試此腳本。 它將始終返回其位置。

#!/bin/bash

echo ${0%/*}

您可以簡單地將cron設置如下:

# m h  dom mon dow   command
* * * * * cd /path-where-you-want-to-save/ && /path/of/yourscript.sh

如注釋中所建議, 腳本可以通過多種方式知道其存儲在哪個目錄中 但是,我建議一個更簡單的解決方案。 在腳本中使用絕對文件路徑。 目標目錄可以是腳本的參數。 這使腳本更加靈活。 這意味着,如果您想在一個以上的位置中執行同一任務,則不必將多個副本存儲在單獨的目錄中。

#!/bin/bash

output_dir="$1" # first argument to the script
echo "blah blah" > "$output_dir"/filename

使用bash參數擴展( https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html )來從特殊變量$0 (存儲腳本名稱)中提取路徑從遠程文件夾執行,否則從當前目錄執行(如果從當前目錄執行, $0將不包含完整路徑)。

#!/bin/bash    
if [[ "$0" == */* ]]; then
  script_path=${0%/*}
else
  script_path=$(pwd)
fi

我正在測試特殊變量$0包含/ 如果是這樣,則使用參數擴展來截斷最后一個/之后的所有內容。 如果它不包含/那么我們必須位於當前目錄中,因此存儲pwd的結果。

從我的測試中,如果以/pathTo/script.sh或按/pathTo/script.sh pushd /pathTo; ./script.sh; popd執行,則可以得到相同的輸出pushd /pathTo; ./script.sh; popd pushd /pathTo; ./script.sh; popd

我在Cygwin中使用GNU bash 4.3.42版對此進行了測試

暫無
暫無

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

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