Isi baris perintah dari skrip


0

Saya memiliki skrip PHP yang melewati banyak kerumitan dan, pada akhirnya, menghasilkan perintah untuk dijalankan oleh pengguna. Saat ini, ia mencetak perintah dan kemudian berhenti. Pengguna harus menyalin perintah dan menempelnya untuk menjalankannya. Karena perintah PHP dijalankan pada baris perintah, akan lebih mudah bagi pengguna jika skrip PHP dapat menempatkan perintah pada baris perintah. Pengguna cukup menekan enter. (Ya - itu adalah persyaratan bahwa manusia menjalankan perintah atau saya hanya akan menjalankan perintah dari dalam skrip.)

Saya telah mencoba menggunakan xclip untuk menyalin perintah ke clipboard. Itu hang. Saya telah menggunakan exec dan sistem untuk menjalankannya. Perintah yang akan dijalankan adalah dalam $ command dan saya menggunakan:

exec("echo \"$command\" | xclip");

Dengan kedua exec dan sistem, itu hang sampai saya ctrl-C dan tidak ada di clipboard.

MEMPERBARUI Saya menemukan bahwa jika saya pipe xclip ke / dev / null pada perintah, itu tidak hang. Saya kemudian dapat menambahkannya ke clipboard pengguna dan dia dapat menjalankannya menggunakan ctrl + shift + v

exec("echo \"$command\" | xclip -sel clip -i > /dev/null");

Saya sudah mencoba membungkus semuanya dalam skrip-skrip rumit pada baris perintah, keluar dari baris keluaran terakhir, dan mencoba menempelkannya ke baris perintah. Saya bisa mendapatkannya untuk mencetak perintah, tetapi tidak pada baris perintah. Itu selalu mencetak perintah dan kemudian baris perintah muncul di bawahnya.

Saya menggunakan BASH untuk baris perintah. Jadi, solusi apa pun harus bekerja di bash shell - dengan asumsi ada solusi


Tidak bisakah skrip PHP Anda hanya meminta pengguna "Untuk menjalankan {perintah} ini silakan tekan enter", tunggu kunci enter, lalu jalankan perintah itu?
DavidPostill

@ Davidvidost Itu saran saya. Itu tidak terbang dengan orang-orang yang (dengan bodoh) membuat keputusan. Saya berkata bahwa saya akan melihat apakah mungkin untuk melakukan apa yang mereka inginkan. Rencana tindakan saya berikutnya adalah menulis bash shell palsu di dalam PHP sehingga sepertinya Anda menjalankan semuanya dalam bash - tapi kemudian saya akan mengambil risiko menjalankan perintah di dalam dirinya sendiri berulang kali ....
kainaw

Sulit ketika manglement menyebalkan;)
DavidPostill

Anda dapat menggunakan "-loop 1" alih-alih "& gt; / dev / null".
Ayell

Jawaban:


0

Tidak persis menekan enter, tetapi tidak jauh lebih sulit - perintah

history -s "command to put in history"

Akan menambahkan baris perintah yang diberikan ke riwayat bash. Anda kemudian dapat menggunakan [panah atas] [enter] untuk mengambil dan menjalankan perintah yang diinjeksi.

(Saya tidak yakin apakah Anda bisa mengeksekusi ini dari PHP secara langsung, atau jika Anda perlu membungkus skrip PHP menjadi skrip bash, tetapi ini harus bisa dilakukan)


Ini berfungsi pada baris perintah, tetapi (sejauh ini) tidak dari dalam skrip PHP. Saya memang membuat saya berpikir tentang cara mendorong "panah ke atas" ke dalam STDIN saat keluar - yang membuat saya berpikir tentang cara mendorong seluruh string ke dalam STDIN saat keluar.
kainaw
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.