GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zeile mit Shell-Skript an die Datei /etc/hosts anhängen

Wenn Sie in Mac sind oder eine Sudo-Berechtigung benötigen, versuchen Sie Folgendes:

sudo -- sh -c -e "echo '192.34.0.03   subdomain.domain.com' >> /etc/hosts";

Sie werden weiterhin nach dem Passwort gefragt.

Alternativer Weg von @kainjow

echo '192.34.0.03 subdomain.domain.com' | sudo tee -a /etc/hosts

Achten Sie darauf, den -i zu verwenden Option von sed .

-i[SUFFIX], --in-place[=SUFFIX]
  edit files in place (makes backup if extension supplied)

sed -i "2i192.241.xx.xx  venus.example.com venus" /etc/hosts

Andernfalls

echo "192.241.xx.xx  venus.example.com venus" >> /etc/hosts

würde die Zeile am Ende der Datei anhängen, was wie erwartet funktionieren könnte.


Eintrag einfügen/aktualisieren

Wenn Sie einen Hosts-Eintrag mit Bash programmgesteuert einfügen/aktualisieren möchten, habe ich hierfür ein Skript geschrieben:

#!/bin/bash

# insert/update hosts entry
ip_address="192.168.x.x"
host_name="my.hostname.example.com"
# find existing instances in the host file and save the line numbers
matches_in_hosts="$(grep -n $host_name /etc/hosts | cut -f1 -d:)"
host_entry="${ip_address} ${host_name}"

echo "Please enter your password if requested."

if [ ! -z "$matches_in_hosts" ]
then
    echo "Updating existing hosts entry."
    # iterate over the line numbers on which matches were found
    while read -r line_number; do
        # replace the text of each line with the desired host entry
        sudo sed -i '' "${line_number}s/.*/${host_entry} /" /etc/hosts
    done <<< "$matches_in_hosts"
else
    echo "Adding new hosts entry."
    echo "$host_entry" | sudo tee -a /etc/hosts > /dev/null
fi

Das Skript ist für die Verwendung mit OS X gedacht, würde aber mit geringfügigen Anpassungen auch unter Linux funktionieren.


Linux
  1. Eine benutzerspezifische Hosts-Datei erstellen, um /etc/hosts zu ergänzen?

  2. CentOS / RHEL:So stellen Sie eine gelöschte /etc/passwd-Datei wieder her

  3. Bash-Skript fügt Text an die erste Zeile einer Datei an

  4. echo oder print /dev/stdin /dev/stdout /dev/stderr

  5. Wie erstelle ich in meiner Datei /etc/hosts/ unter Linux/OSX eine Wildcard-Subdomain?

Echotext mit neuer Zeile in Bash

Was ist die Größenbeschränkung für /etc/hosts?

Mit Feldtrenner sortieren

Wie ändert man /etc/hosts aus Shell-Skripten?

Templating mit Linux in einem Shell-Skript?

Größenbeschränkung von /etc/hosts (Linux)