Komut satırından komut satırına yerleştir


0

Çok fazla karmaşıklıktan geçen ve sonunda kullanıcının çalıştırması için bir komut üreten bir PHP betiğim var. Şu anda, komutu yazdırır ve sonra çıkar. Kullanıcı komutu kopyalamak ve çalıştırmak için yapıştırmak zorundadır. PHP komutu komut satırında çalıştırıldığı için, PHP betiği komutu komut satırına yerleştirebildiyse kullanıcı için daha kolay olurdu. Kullanıcı sadece enter tuşuna basabilir. (Evet - bir insanın komutu çalıştırması bir gerekliliktir, yoksa sadece komut dosyasının içinden komutu uygularım.)

Komutu panoya kopyalamak için xclip kullanmayı denedim. Kilitleniyor. Çalıştırmak için exec ve sistemi kullandım. Çalıştırılacak komut $ komutunda ve kullandım:

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

Hem exec hem de system ile ctrl-C'ye kadar kilitlenip panoda hiçbir şey kalmadı.

GÜNCELLEŞTİRME Xclip komutunu komutta / dev / null dizinine yönlendirirsem asılmadığını buldum. Daha sonra kullanıcının panosuna ekleyebilir ve ctrl + shift + v kullanarak çalıştırabilir

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

Her şeyi komut satırındaki karmaşık komut dosyalarına sığdırmayı, son çıktı satırını izlemeyi ve komut satırına yapıştırmayı denedim. Komutu yazdırmak için alabilirim, ancak komut satırında değil. Her zaman komutu yazdırır ve ardından komut satırı altında gelir.

Komut satırı için BASH kullanıyorum. Bu nedenle, herhangi bir çözüm, bir çözüm olduğunu varsayarak bash kabuğunda çalışmalıdır.


PHP betiğiniz, "Bu {komutu} yürütmek için lütfen enter tuşuna basın" adlı kullanıcıya şunu sorar mı, bir giriş tuşunu bekleyin, sonra komutu gerçekten uygular mı?
DavidPostill

@DavidPostill Bu benim önerimdi. Kararları veren (cahilce) pirinçle uçmadı. İstediklerini yapmanın mümkün olup olmadığını göreceğimi söyledim. Bir sonraki eylem planım, PHP'ye sahte bir bash kabuğu yazmak, böylece her şeyi bash olarak çalıştırıyormuşsunuz gibi görünüyor - ama o zaman tekrar tekrar komutunu kendi içinde çalıştırma riski taşıyacağım.
kainaw

Yönetim berbat olduğunda zor;)
DavidPostill

"& Gt; / dev / null" yerine "-loops 1" komutunu kullanabilirsiniz.
Ayell

Yanıtlar:


0

Tam olarak enter tuşuna basılmadı, ancak daha zor değil - komut

history -s "command to put in history"

Verilen komut satırını bash geçmişine ekleyecektir. Enjekte edilen komutu almak ve çalıştırmak için basitçe [yukarı ok] [enter] düğmesini kullanabilirsiniz.

(Bunu doğrudan PHP'den çalıştırabileceğinizden veya PHP betiğini bash betiğine sarmanız gerekip gerekmediğinden emin değilim, ancak bu yapılabilir olmalıdır)


Bu komut satırında çalışır, ancak (şimdiye kadar) bir PHP betiğinin içinden değil. Çıkışta STDIN'e bir "yukarı ok" nasıl basılacağı hakkında düşünmemi sağladım - bu da tüm dizeleri çıkışta STDIN'e nasıl sokacağımı düşünmemi sağladı.
kainaw
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.