[英]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.