Apakah ada cara bagaimana saya bisa menjalankan dua perintah Db2 dari baris perintah? (Mereka akan dipanggil dari exec
perintah PHP .)
db2 connect to ttt
(perhatikan bahwa kita perlu memiliki koneksi langsung untuk perintah keduadb2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'
Saya mencoba ini:
sudo -su db2inst1 db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'
Perintah pertama selesai dengan benar tetapi yang kedua gagal dengan pesan kesalahan SQL1024N A database connection does not exist. SQLSTATE=08003
Perhatikan bahwa saya perlu menjalankan ini sebagai pengguna php. Perintah sudo -u db2inst1 id
sebagai pengguna php memberi saya hasil yang benar.
Jawaban:
sudo dapat menjalankan banyak perintah melalui shell, misalnya:
Perintah Anda akan menjadi seperti:
Jika versi sudo Anda tidak berfungsi dengan titik koma dengan -s (tampaknya, itu tidak jika dikompilasi dengan opsi tertentu), Anda dapat menggunakan
sebagai gantinya, yang pada dasarnya melakukan hal yang sama tetapi membuat Anda memberi nama shell secara eksplisit.
sumber
sudo -s -- '/usr/bin/whoami; /usr/bin/whoami' /bin/bash: /usr/bin/whoami; /usr/bin/whoami: No such file or directory
sudo -- sh -c 'whoami; whoami;
sebagai solusi saat "sudo -s" rusak. Saya sudah memperbarui jawabannya juga.--
Menunjukkan akhir parametersudo
, jadi yang lainnya adalah bagian dari perintah; tanpa itu, argumen seperti-c
bisa diartikan sebagai argumensudo
. Ini berfungsi untuk sebagian besar (tetapi tidak semua) program baris perintah. Untuksudo
contoh (non- ) lainnya, untuk menghapus file yang disebut-f
Anda tidak bisa dijalankanrm -f
, bukan ?! Tetapi Anda dapat menjalankanrm -- -f
untuk menghapus file yang disebut-f
.Untuk perintah Anda, Anda juga dapat merujuk pada contoh berikut:
sudo sh -c 'whoami; whoami'
sumber
Saya biasanya melakukan:
sumber
Jika Anda ingin menangani penawaran:
sumber
sudo
- Anda selalu perlu mengelabuinya untuk mengeksekusi shell yang dapat menerima beberapa perintah untuk dijalankan sebagai parameter"Alternatif penggunaan
eval
sehingga menghindari penggunaan subkulit:Catatan: Jawaban lain menggunakan
sudo -s
gagal karena tanda kutip diteruskan ke bash dan dijalankan sebagai satu perintah sehingga perlu menghapus tanda kutip dengan eval.eval
lebih baik dijelaskan adalah jawaban SO iniMengutip dalam perintah juga lebih mudah:
Dan jika perintah perlu berhenti berjalan jika gagal menggunakan double-ampersand bukan semi-titik dua:
sumber
The
-s
pilihan tidak bekerja untuk saya,-i
lakukan.Berikut adalah contoh bagaimana saya dapat memperbarui ukuran log dari bash saya:
sumber
Di terminal, ketik:
Kemudian tulis sebanyak mungkin perintah yang Anda inginkan. Tipe
exit
saat Anda selesai.Jika Anda perlu mengotomatiskannya, buat
script.sh
file dan jalankan:sumber
Pada topik yang sedikit terkait, saya ingin melakukan sudo multi-perintah yang sama melalui SSH tetapi tidak ada yang berhasil.
Misalnya di Ubuntu,
Trik yang ditemukan di sini adalah dengan mengutip dua kali perintah.
Opsi lain yang juga berfungsi:
Pada prinsipnya, tanda kutip ganda diperlukan karena saya pikir shell klien tempat SSH dijalankan menghapus set tanda kutip yang paling luar. Campur dan sesuaikan kutipan dengan kebutuhan Anda (mis. Variabel harus dimasukkan) Namun YMMV dengan tanda kutip terutama jika perintah jarak jauh kompleks. Dalam hal ini, alat seperti Ansible akan membuat pilihan yang lebih baik.
sumber
Jika Anda tahu kata sandi root, Anda dapat mencoba
sumber
sudo su -c "<command1> ; <command2>"
.Jawaban di atas tidak akan membiarkan Anda mengutip di dalam kutipan. Solusi ini akan:
Perintah umask dan mkdir-command berjalan dengan pengguna 'tidak ada'.
sumber