Ajouter la ligne dans /etc/hosts avec shell script
J'ai un nouveau Ubuntu 12.04 VPS. Je suis en train d'écrire un script d'installation qui remplit toute la LAMPE de l'installation. Où j'ai de la difficulté est à ajouter une ligne à la /etc/hosts
fichier. Mon fichier hosts ressemble à ceci:
127.0.0.1 localhost Venus
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Je voudrais qu'elle ressemble à ceci:
127.0.0.1 localhost Venus
192.241.xx.xx venus.example.com venus
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
J'ai essayé une variété de sed
commandes à l'aide de l'append (\a
) de commande. Pour une raison que Ubuntu soit juste fait écho au contenu de la hosts
fichier dans le terminal ou ne fait rien du tout. Comment aurais-je correctement injecter de la deuxième ligne dans le fichier avec un script bash?
- github.com/alphabetum/hosts ressemble à une bonne solution si vous êtes autorisé à installer des paquets
Vous devez vous connecter pour publier un commentaire.
Assurez-vous d'utiliser le
-i
option desed
.Sinon,
voudrais ajouter la ligne à la fin du fichier, qui pourrait fonctionner comme prévu.
-i ''
commesed -i '' '2i192.241.11.22 venus.example.com venus' /etc/hosts
. La version Mac de sed exige le paramètre d'extension pour-i
, même si elle est vide.$ a
option à ajouter à la dernière ligne, voir: stackoverflow.com/a/50003244/658497Insérer/Mettre À Jour L'Entrée
Si vous souhaitez insérer par programme/mise à jour hôtes entrée à l'aide de bash, voici un script que j'ai écrit pour le faire:
Le script est prévu pour une utilisation avec OS X, mais pourrait fonctionner sur linux avec de légers ajustements.
Si votre mac ou vous avez besoin de sudo autorisation de cela, essayez ceci:
Il va encore vous demander un mot de passe.
autre façon de @kainjow
tee
:echo '192.34.0.03 subdomain.domain.com' | sudo tee -a /etc/hosts
-- sh -c -e
fait? Je préfère savoir ce que je vais mettre dans mon terminal plutôt que de simplement copier-coller 🙂-e
--
est utilisé dans les commandes shell pour signifier la fin des options de la commande, après quoi seulement les paramètres positionnels sont acceptés. Lesh
est le shell interpréteur de commandes utilisé avec le drapeau-c
qui provoque les commandes à être lu à partir de la chaîne opérande au lieu de partir de l'entrée standard. Le-e
drapeau est inutile pour notre cas d'utilisation, mais il provoque le interprétée commande pour quitter immédiatement si l'un non testé commande échoue en mode non-interactif.Je tiens à souligner que
sed
(le flux de l'éditeur) n'est pas réellement destiné à l'édition de fichiers, mais il peut être utilisé pour le faire. (Standard sed ne dispose pas d'un mécanisme intégré pour l'écriture à d'autres que la sortie standard.) Un plus de l'outil approprié seraited
.Suivantes ed script dit "trouvez la ligne contenant le (certes bâclée) expression régulière /127.0.0.1/et l'ajouter à la ligne suivante." (Le seul de la période raconte ed arrêter de ajoutant des.)
Cela dit, vous pouvez vraiment juste ajouter cette ligne à la fin de votre fichier /etc/hosts très trivialement:
ed
avant. Il semble très puissant et vous sera utile. Merci pour le partage.sudo -- sh -c "echo '192.241.xx.xx venus.example.com' >> /etc/hosts"
simplementsudo echo ...
entraînera unepermission denied
.vous pouvez utiliser sed, comme:
sed '/Vénus/a\
192.241.xx.xx venus.example.com vénus' /etc/hosts
essayez-le avec les accès root.
sudo pour le super utilisateur l'autorisation
cela aura pour effet d'ajouter les lignes pour les hôtes dans l'android