Bashスクリプトはgrepとsedのパイピング後にコマンドを誤解します。

Bashスクリプトはgrepとsedのパイピング後にコマンドを誤解します。

bashがコマンドを誤解したようshasumですtar。これは奇妙な問題です。スクリプトの以前の内容がコードに影響を与えています。

以下のコードでは、

  • shasum次のように実行およびレンダリングされます。: asum: monero-gui-linux-x64-v0.15.0.4.tar.bz2
  • tar次のように実行およびレンダリングされます。'ar: Error opening archive: Failed to open 'monero-gui-linux-x64-v0.15.0.4.tar.bz2

したがって、両方のコマンドが失敗します。私はここで何を間違えましたか?

PS。完全なコードを実行する場合は、ハッシュを確認するために公開PGPキーを取得する必要があります。https://github.com/monero-project/monero/blob/master/utils/gpg_keys/binaryfate.asc

#!/bin/bash

filename=$( curl -L --head https://downloads.getmonero.org/gui/linux64 2> /dev/null | grep Location: | sed 's:.*/::' )
filename_stripped=$( echo "$filename" | sed 's/\..[^.]*\.tar.bz2/ /g' )
version_repo=$( echo "$filename_stripped" | awk -F"-v" '/x64-v/ { print $2 }' )

echo "" 
echo Current version: $version_current
echo Repo version: $version_repo
echo ""

function update { 
    # Update
    wget -O hashes.txt https://getmonero.org/downloads/hashes.txt
    gpg --verify hashes.txt
    if [ $? -eq 0 ]
    then
        echo Signature OK
        wget --content-disposition https://downloads.getmonero.org/gui/linux64
        curr_shasum=$( shasum -a 256 "$filename" | awk '{ print $1 }' )
        grep "$curr_shasum" hashes.txt 
        if [ $? -eq 0 ]
        then
            echo Hash OK
            tar xvf "$filename"
        else
            echo Hash NOT ok
        fi

    else
        echo Signature NOT ok
    fi
}

while true; do
    read -p "Do you wish to update?" yn
    case $yn in
        [Yy]* ) update;break;;
        [Nn]* ) break;;
        * ) echo "Please answer yes or no.";;
    esac
done

ベストアンサー1

@スチールドライバ答えが提供されます。ファイル名に見えないキャリッジリターンがあり、次のように解決しました。

filename_CR=$(curl -L --head https://downloads.getmonero.org/gui/linux64 2> /dev/null | grep Location: | sed 's:.*/::')
filename=$(echo $filename_CR | tr -d '\r')

おすすめ記事