2011-01-17 8 views
-1

EDIT (Question complémentaire)Comment encoder l'URL dans un script bash?

Quelqu'un peut-il expliquer ce que fait cette ligne?

eval website=\${$#} 

Le script lit beaucoup de paremeters, on appelle ça un peu comme ce

./script.sh -t 30 100 -n -a essai http://www.google.com

J'ai du mal à lire l'URL (http://www.google.com)


J'ouvre Firefox en utilisant les urls passé à un script bash. Comment puis-je les encoder? Certaines de ces URL posent problème.

Certains Code

eval website=\${$#} // takes as argument 

firefox -width 1280 -height 8000 ${website} & 

URL Problématiques

http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1 $ 41912

Dans Firefox, il ouvre comme

http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/141912

signe $ se retire

+1

s'il vous plaît inclure l'URL problématique pour faire l'illustration/test plus facile – ajreal

+0

-1: cette question a très peu à voir avec le codage URL et beaucoup à voir avec les citations de bash. – qdii

Répondre

2

La manière la plus simple est probablement d'échapper les caractères qui causent certains problèmes.

À moins que votre URL contient des caractères inhabituels comme ', ou \, vous devriez être bien juste en mettant votre URL entre la remorque ':

$ firefox 'YOUR_URL' 

Cela permettra d'éviter le contenu YOUR_URL à évaluer.


Modifier, afin de refléter la réponse mise à jour:

Vous pouvez voir en utilisant la commande echo comment bash augmente vos paramètres.

Dans votre exemple, bash pense $ est utilisé pour identifier une variable (une variable nommée 4), ainsi substitue $4 à la valeur de la variable 4, qui n'est pas définie (donc juste supprime $4):

$ echo http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912 
http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/11912 
$ echo 'http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912' 
http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912 
2

Ne jamais utiliser eval, et toujours citer vos variables. Le premier argument ist stocké dans le paramètre 1:

firefox "$1" & 
1

Cette ligne:

eval website=\${$#} 

la variable à être le dernier paramètre de position, quel que soit le nombre.

Modifier à:

website=${@: -1} 

qui est un bash, par la voie.

Voici quelques autres bashismes qui accomplissent la même chose:

echo "${!#}" 
echo "${@:$#}" 
echo "${BASH_ARGV[0]}" 
+0

Merci Dennis! – HyderA

Questions connexes