Menambahkan baris ke file hosts, mendapatkan izin ditolak saat menggunakan sudo - Mac

14

Saya mencoba menambahkan baris ke file host di Mac saya dengan menjalankan perintah satu baris di terminal.

Saya pikir ini akan mudah menggunakan sudo, tetapi mengembalikan "izin ditolak" ketika saya mencoba menambahkan >>ke file host, tetapi berfungsi jika saya mencoba mengganti >konten host.

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

sudo echo test > /etc/hosts
Password:
$ 

OS terbaru.

daun mint
sumber
cukup gunakan editor teks (dimulai dengan sudo ) untuk memodifikasi / etc / hosts Anda
MrSmith42
1
Saya ingin membuat skrip yang akan membantu mengotomatisasi ini, jadi editor teks tidak akan membantu dalam kasus ini.
Mint

Jawaban:

17

Itu karena echosedang dijalankan sebagai root, tetapi shell adalah yang benar-benar melakukan pengalihan. Anda perlu membuat shell baru agar ini berfungsi:

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

Sunting: Saya belum melihat fakta bahwa >pengalihan berfungsi; Saya tidak bisa menjelaskannya.

Aluísio ASG
sumber
Saya merasa perlu memperhatikan utilitas teekarena memungkinkan pelaksanaan subkulit dari sudodan harus diblokir di sebagian besar lingkungan produksi untuk alasan keamanan.
Steve Buzonas
9

Ketimbang menjalankan gema melalui redirect yang akan dijalankan sebagai pengguna Anda saat ini, tidak akar seperti gema yang sedang berjalan dalam contoh Anda, gunakan tee sebagai Steve Buzonas menyarankan

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

Sudo sekarang diterapkan pada perintah tee. '-A' ditambahkan ke file

Ini juga akan menampilkan tee ke output standar. Jika Anda tidak ingin melihat 'tes' di terminal Anda juga tambahkan: > /dev/nullke akhir baris itu.

pengguna2926534
sumber
1

Untuk memastikan bahwa baris baru dibuat terlebih dahulu, saya menggunakan ini:

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