Jalankan shell di dalam sudo
:sudo bash -c 'whoami; whoami'
Anda dapat menggunakan karakter apa pun kecuali '
sendiri di dalam tanda kutip tunggal. Jika Anda benar-benar ingin memiliki satu kutipan dalam perintah itu, gunakan '\''
(yang secara teknis adalah:end single-quote literal, literal '
karakter, mulai literal kutipan tunggal; tetapi secara efektif ini adalah cara untuk menyuntikkan satu kutipan ke dalam string literal yang dikutip tunggal).
Anda dapat meneruskan perintah sebagai input standar ke sudo'ed bash dengan dokumen di sini:
sudo bash <<"EOF"
whoami
id
EOF
Dengan cara ini tidak perlu mengutak-atik kutipan yang benar, terutama jika Anda memiliki banyak level, misalnya:
sudo bash <<"EOF"
whoami
echo $USER ~
sudo -u apache bash <<"DOF"
whoami
echo $USER ~
DOF
EOF
Menghasilkan:
root
root /root
apache
apache /usr/share/httpd
(Perhatikan bahwa Anda tidak dapat mengindentasi terminator bagian dalam — harus sendirian di barisnya. Jika Anda ingin menggunakan indentasi dalam dokumen di sini, Anda dapat menggunakan <<-
bukannya <<
, tetapi Anda harus membuat indentasi dengan tab, bukan spasi.)
misalnya coba ini, saya mengujinya:
sudo bash -c "cd /;ls;ls|grep o"
Dalam contoh ini, pertama-tama Anda mengubah dir menjadi /root, selanjutnya daftar direktori root dan terakhir untuk filter direktori root hanya direktori yang memiliki nama dengan huruf 'o'.
Tapi cara yang lebih baik adalah menulis skrip yang melakukan semua yang Anda butuhkan dan memberikan kode keluar untuk semua tindakan kompleks. Kemudian Anda dapat sudo skrip sebagai ganti grup perintah tunggal seperti contoh di atas.