Hinzufügen einer Zeile zur Hosts-Datei, Verweigerung der Berechtigung bei Verwendung von sudo - Mac

14

Ich versuche, der Hosts-Datei auf meinem Mac eine Zeile hinzuzufügen, indem ich einen einzeiligen Befehl auf dem Terminal ausführe.

Ich dachte, dass dies mit sudo einfach wäre, aber es gibt "Berechtigung verweigert" zurück, wenn ich versuche >>, der Hosts-Datei etwas hinzuzufügen , aber es funktioniert, wenn ich versuche, >den Host-Inhalt zu ersetzen .

sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$

sudo echo test > /etc/hosts
Password:
$ 

Das Betriebssystem ist auf dem neuesten Stand.

Minze
quelle
Verwenden Sie einfach einen Texteditor (gestartet mit sudo ), um Ihre / etc / hosts
MrSmith42
1
Ich möchte ein Skript erstellen, das dies automatisiert, sodass ein Texteditor in diesem Fall nicht hilft.
Münze

Antworten:

17

Das echoliegt daran, dass es als root ausgeführt wird, aber die Shell ist diejenige, die die Umleitung tatsächlich ausführt. Sie müssen eine neue Shell erstellen, damit dies funktioniert:

sudo -- sh -c "echo test >> /etc/hosts"

Bearbeiten: Ich habe nicht gesehen, dass die >Umleitung funktioniert; Das kann ich nicht erklären.

Aluísio ASG
quelle
Ich teehalte es für erwähnenswert, das Dienstprogramm zu erwähnen, da das Zulassen einer Subshell-Ausführung von sudoin den meisten Produktionsumgebungen aus Sicherheitsgründen blockiert ist und blockiert werden sollte.
Steve Buzonas
9

Verwenden Sie Tee, wie Steve Buzonas vorschlägt, anstatt Echo durch eine Umleitung auszuführen, die als Ihr aktueller Benutzer ausgeführt wird, und nicht als Root, da Echo in Ihrem Beispiel ausgeführt wird

 echo 'test' | sudo tee -a /etc/hosts

Das sudo wird jetzt auf den Abschlagbefehl angewendet. Das '-a' wird an die Datei angehängt

Dadurch wird auch das T-Stück auf die Standardausgabe ausgegeben. Wenn Sie "test" nicht in Ihrem Terminal sehen möchten, fügen Sie > /dev/nullam Ende dieser Zeile Folgendes hinzu:

user2926534
quelle
1

Um sicherzustellen, dass zuerst eine neue Zeile erstellt wurde, habe ich Folgendes verwendet:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
blizzrdof77
quelle