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

kainaw
sumber
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)

davidgo
sumber
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