Untuk melakukan patch secara manual saya harus mengetik perintah ini
sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
Ada ruang sebelum 09:
sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql
Bagaimana saya bisa menjalankan ini di dalam skrip?
Ada juga beberapa perintah lain tetapi ini memberikan masalah.
sudo
kata sandi - skrip tidak akan dapat berjalan sepenuhnya jika seseorang tidak ada di sana untuk memasukkannya.sudoers
pengaturan Anda . Bukan masalah besar. Itu hanya perlu diperbaiki.Jawaban:
Jarang ada ide bagus untuk memiliki
sudo
skrip dalam. Alih-alih, hapussudo
dari skrip dan jalankan skrip itu sendiri dengansudo
:Dengan begitu, semua perintah dalam skrip akan dijalankan dengan hak akses root dan Anda hanya perlu memberikan kata sandi sekali saat meluncurkan skrip. Jika Anda memerlukan perintah tertentu di dalam skrip untuk dijalankan tanpa
sudo
hak istimewa, Anda dapat menjalankannya sebagai pengguna biasa dengan (terima kasih Lie Ryan ):Ruang tidak relevan, seharusnya tidak mempengaruhi apa pun, selalu ada ruang antara perintah dan argumennya.
sumber
sudo
panggilan eksplisit dalam skrip, karena meninggikan seluruh skrip ke root mungkin merupakan ide yang mengerikan jika hanya ada beberapa tindakan sempit yang perlu di-root. Dalam konteks itu saya merespons komentar Anda secara khusus: "Sebagian besar karena ini berarti Anda tidak dapat menjalankan skrip secara otomatis karena Anda harus memasukkan kata sandi setiap kali Anda ditanya."Anda dapat memodifikasi
sudoers
file.Lari
sudo visudo
.Tambahkan entri untuk nama pengguna Anda dan skrip yang ingin Anda jalankan tanpa diminta kata sandi.
sumber
sudoers
file.Anda dapat mencoba sesuatu seperti:
Ini bukan hal yang paling aman untuk dilakukan karena Anda menulis kata sandi sudoer dalam teks biasa. Untuk membuatnya sedikit lebih aman Anda bisa membuat variabel dan membaca kata sandi sudo ke dalam variabel dan kemudian Anda bisa menjalankan perintah sebagai:
Juga, jika Anda tidak keberatan semua perintah Anda dijalankan sebagai root, Anda dapat dengan mudah mengeksekusi skrip Anda menggunakan
sudo
, seperti yang disarankan sebelumnya.sumber
read -s PASSWORD
Jawaban ini mirip dengan jawaban terdon . Saya juga menyarankan untuk menjalankan skrip utama
sudo
agar skrip dapat berjalan tanpa harus meminta kata sandi pengguna selama eksekusi.Namun, jika Anda ingin menghapus hak root untuk beberapa perintah dan menjalankannya sebagai pengguna sebenarnya yang dipanggil dengan perintah
sudo
, Anda dapat memeriksa$SUDO_USER
variabel untuk mencari tahu pengguna asli.Ini adalah contoh skrip tentang bagaimana Anda dapat mencapai itu:
sumber
Sebenarnya ada cara yang lebih sederhana untuk melakukan ini. Untuk portabilitas, ini adalah implementasi saya tetapi merasa bebas untuk memanipulasinya sesuai dengan kebutuhan Anda.
Masukkan kata sandi sudo Anda sebagai parameter saat memulai skrip, tangkap, dan gema dengan setiap perintah yang akan meminta kata sandi sudo.
Anda dapat menambahkan prompt dan menangkap setelah skrip dimulai seperti:
Tetapi jika orang lain memantau apa yang berjalan pada node; memiliki akses ke log yang dibuat olehnya; atau hanya memeriksa Anda secara acak ketika Anda menjalankan tes, yang dapat membahayakan keamanan.
Ini juga berfungsi dengan menjalankan perintah / skrip yang memerlukan ya untuk melanjutkan:
Gema sebagai respons terhadap prompt, sehingga Anda dapat menggunakan apa pun yang Anda butuhkan, di sana, jika Anda menjalankan skrip lain yang memiliki permintaan untuk kemajuan, secara berurutan. Namun, pastikan Anda tahu bahwa ketertiban atau hal-hal buruk dapat terjadi.
sumber
read
: ryanstutorials.net/bash-scripting-tutorial/bash-input.php Itu harus menghindari masalah inisumber
Anda bisa mencoba menambahkan pengguna yang menjalankan skrip ke file sudoers:
sumber