Dugaan saya adalah sebagai berikut:
echo "Generating some text" | su - -c cat >/output/file
Tetapi su
mengatakan:
su: must be run from a terminal
Apa yang akan kamu lakukan?
shell
shell-script
io-redirection
su
x-yuri
sumber
sumber
Jawaban:
sudo
mendukung ini.Perbedaannya adalah yang
sudo
meminta kata sandi pengguna Anda, bukan kata sandiroot
(target user). Namun jika Anda menginginkannya, Anda dapat mengubah perilaku ini dengantargetpw
(ataurunaspw
ataurootpw
) arahan dalamsudoers.conf
.Namun membaca apa yang Anda coba lakukan, sementara ini menyelesaikan masalah peningkatan izin, itu tidak akan melakukan apa yang Anda harapkan. Makna
/output/file
tidak akan dibuat sebagai pengguna root, itu akan dibuat / dimodifikasi sebagai pengguna Anda.Alasan untuk ini adalah bahwa redirection output shell dilakukan sebelum menjalankan perintah. Jadi shell terbuka
/output/file
dan meneruskan file yang dibuka kesu
/sudo
(dan akibatnya,cat
).Namun Anda dapat menggunakannya
tee
untuk melakukan ini sebagai gantinya, karenatee
utilitas akan membuka file itu sendiri.Pada dasarnya
tee
menyalin output ke/output/file
dan STDOUT, namun STDOUT diarahkan ke/dev/null
.Anda juga bisa:
... yang kurang samar.
sumber
sudo -v
. Ini akan menanyakan kata sandi Anda jika Anda belum menggunakan sudo dalam beberapa menit.Asal tahu saja - Anda tidak terbatas pada satu perintah per
|pipe
:Semua proses itu dipanggil pada saat yang sama - tetapi mereka semua menunggu
|pipe
sebelum mereka sebelum benar-benar melakukan apa pun - asalkan mereka membaca|pipe
sama sekali, yaitu. Jadi, jika Anda perlu mengevaluasi variabel midstream, atau untuk mengatur pengalihan, Anda bisa. Santai saja.Ini cara lain:
Jika Anda tidak melakukannya
( subshell )
, perintahnya juga$(cat)
akan</dev/tty
berhasil.Tetapi jika Anda menggunakan dokumen-sini, Anda tidak perlu dua
cat
s:KELUARAN:
Sebagian besar di atas hanya untuk demo ini. Yang Anda butuhkan adalah:
sumber