簡體   English   中英

Bash-自解壓腳本錯誤

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

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