Los scripts de Bash malinterpretan el comando después de canalizar grep y sed

Los scripts de Bash malinterpretan el comando después de canalizar grep y sed

Parece que bash malinterpreta el comando shasumy tar. Es un problema extraño donde algo anterior en el script afecta el código.

Del código siguiente,

  • shasumse ejecuta y presenta como:: asum: monero-gui-linux-x64-v0.15.0.4.tar.bz2
  • tarse ejecuta y presenta como:'ar: Error opening archive: Failed to open 'monero-gui-linux-x64-v0.15.0.4.tar.bz2

Por lo tanto, ambos comandos fallan. ¿Cuál es mi error aquí?

PD. Para aquellos de ustedes que quieran intentar ejecutar el código completo, deben importar la clave pgp pública para verificar el hash: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

Respuesta1

@steeldriverproporcionó la respuesta. Tenía un retorno de carro invisible en el nombre del archivo y lo resolví con:

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')

información relacionada