bash-5.0-6 al intentar ejecutar el siguiente script genera un error de sintaxis:
wget -nv -O index.html "https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch"
el mensaje de error resultante:
2020-08-24 20:38:51 URL:https://de.wikibooks.org/w/index.php?title=Spezial:Pr%C3%A4fixindex&namespace=0&from=Mathematik%3A_Lineare_Algebra [96400] -> "index.html" [1]
get_wikibooks.sh: 18: Syntax error: Unterminated quoted string
Parece que el signo "%" causa el error. Pero, ¿cómo puedo escribir el guión para que sea utilizable?
gracias de antemano adiós hans
PD Mi código completo es:
set -x
#!/bin/bash
buch=$(zenity --entry --title "Download eines Wikibooks" --text "Bitte geben Sie den Buchtitel an:")
buch=$(echo $buch | sed "s/ /_/g")
mkdir -p ~/wikibooks/$buch
cd ~/wikibooks/$buch
wget -nv -O index.html 'https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch'
if [ $? -ne 0 ] ; then
zenity --error --title "Download eines Wikibooks - Fehler" \
--text "Ein Fehler ist aufgetreten\! \nÜberprüfen sie die Internet-Verbindung und den Buchtitel."
fi
wget -nv -c $(cat index.html | tr '"' '\n’ | egrep "^/wiki$buch" | sort -u | sed "s#^#https://de.wikibooks.org#")
if [ $? -ne 0 ] ; then
zenity --error --title "Download eines Wikibooks - Fehler" \
--text "Ein Fehler ist aufgetreten\! \nÜberprüfen sie die Internet-Verbindung und den Buchtitel."
fi
for i in $(ls); do sed "s#href=\"/wiki/$buch#href=\"./$buch#g" $i > $i.temp; mv $i.temp $i; done
zenity --info --title "Download eines Wikibooks" --text "Herunterladen des Buches erfolgreich\!"
Respuesta1
El código tiene errores entre comillas. Considere esta línea:
wget -nv -c $(cat index.html | tr '"' '\n’ | egrep "^/wiki$buch" | sort -u | sed "s#^#https://de.wikibooks.org#")
El comando tr es tr '"' '\n’
. La comilla final de ese comando es una comilla invertida Unicode (no ASCII). Esto no es válido como comilla simple de shell.
Reemplazar tr '"' '\n’
con tr '"' '\n'
.
Después de haber hecho eso, corte y pegue su código en shellcheck.net y corrija cualquier error restante (importante) o advertencia (podría ser importante) que identifique.
Respuesta2
Emitir el mismo comando por sí solo funciona bien. Sin embargo, dado que tiene $
la URL, es posible que se cuente como una variable ya que está usando "
try:
wget -nv -O index.html 'https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch'
tenga en cuenta las '
comillas simples... a menos que $buch
sea una variable dentro de su script bash.