[英]Bash - Self extracting script error
我正在努力在Open SuSE上創建自解壓shell腳本。 我正在引用此鏈接 。 我的代碼如下所示-
#!/bin/bash
function die ()
{ echo "Error!";
exit 1 ;
}
echo Extracting...
# Script will need to find where is the archive. So search for "ARCHIVE" in this script and
# save the line number
archive=$(grep --text --line-number 'ARCHIVE:$' $0)
echo $archive
tail -n +$((archive + 1)) $0 | gzip -vdc - | tar -xvf - > /dev/null || die
echo Extraction completed
exit 0
ARCHIVE:
執行以上腳本后,得到以下輸出。 我認為這是不正確的並導致錯誤。
Extracting...
22:ARCHIVE:
./symhelp_self_extract.sh: line 16: 22:ARCHIVE:: syntax error in expression (error token is ":ARCHIVE:")
gzip: stdin: unexpected end of file
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
Error!
誰能解釋這是什么語法錯誤?
謝謝,
奧姆基
如果您需要行號:
archive=$(grep --text --line-number 'ARCHIVE:$' "$0")
archive=${archive%%:*}
要么
archive=$(awk '/ARCHIVE:$/{print NR; exit}' "$0")
問題的原因是您試圖對非數字的東西進行算術運算:
$((archive + 1)) ## here $archive = 22:ARCHIVE: before
始終還要引用您的變量:
archive=$(grep --text --line-number 'ARCHIVE:$' "$0")
...
tail -n "+$((archive + 1))" "$0"
使用awk,您將獲得一種更簡單的方法:
awk -v r='ARCHIVE:$' '!p && $0 ~ r { p = 1; getline } p' "$0" | gzip -vdc - | tar -xvf - > /dev/null || die
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.