2016-12-10 5 views
0

Ich versuche ein Skript zu haben, um ips zu/etc/hosts hinzuzufügen, aber wenn es eine Zeile zu/etc/hosts hinzufügt, ist die Zeile leer. Ich denke, es ist ein Problem, mit dem Variablennamen von Wert in den [ "] ausgetauscht:Bash-Skript: Wie interpretieren Variablen im Sub-Bash-Befehl?

machines=("dell" "pb") 
ips=("192.168.0.70" "192.168.0.60") 
n=-1 
for nom_machine in "${machines[@]}" 
do 
     n=$(($n + 1)) 
     ip_machine=${ips[$n]} 
     link=" $ip_machine $nom_machine" 
     $(sudo /bin/bash -c 'echo -e $link >> /etc/hosts') 

done 

Jede Idee, warum dies leere Zeilen hinzufügen/etc/hosts

Antwort

0

Variablen erweitert werden nicht in? einfache Anführungszeichen, nur doppelte Anführungszeichen. Sie brauchen auch nicht die $(...) um sudo.

sudo bash -c "echo -e $link >> /etc/hosts" 

Als Problem Skript Stil, würde ich vorschlagen, die sudo Anruf zu entfernen zusammen. Stattdessen erwarten, dass die Person, die das Skript es laufen laufen mit sudo, wenn sie es nicht tun ausreichende Berechtigungen haben Ihr Skript hätte nur:

echo -e "$link" >> /etc/hosts