GNU/Linux >> Belajar Linux >  >> Linux

mengirim input teks ke layar terpisah

Saya dapat memecahkan setidaknya sebagian dari masalah:mengapa stop bagian tidak bekerja. Secara eksperimental, saat Anda memulai sesi Layar dalam mode terpisah (screen -d -m ), tidak ada jendela yang dipilih, jadi masukan nanti dikirim dengan screen -X stuff hilang begitu saja. Anda perlu menentukan secara eksplisit bahwa Anda ingin mengirim penekanan tombol ke jendela 0 (-p 0 ). Ini adalah ide yang bagus, jika Anda kebetulan membuat jendela lain di sesi Layar itu karena alasan apa pun.

screen -S minecraft -p 0 -X stuff "stop^M"

(Terjemahan layar ^M ke control-M yang merupakan karakter yang dikirim oleh Enter kunci.)

Masalah saat memulai sesi dari skrip kemungkinan terkait dengan unMENU.


Pertama, catatan tentang cara memasukkan baris baru dengan mudah:

Perhatikan bahwa $() membangun strip baris baru dari output perintah sehingga baris output dapat digunakan sebagai argumen untuk program lain. Ini dapat menyebabkan perilaku yang tidak terduga. Dalam hal ini saya menganggap Anda secara khusus mencoba mengirim yang setara dengan Enter keystroke. Sementara carriage return Anda mengirim dengan \r tidak akan bergaris, ada beberapa cara yang lebih mudah untuk memasukkan karakter tersebut tanpa memerlukan perintah tambahan.

  1. Anda dapat menempatkan baris baru biasa di dalam tanda kutip ganda Anda

    screen -S minecraft -X stuff "stop
    "
    
  2. Atau Anda dapat memasukkan karakter di baris terminal menggunakan Ctrl +v Masuk urutan. Ini akan terlihat seperti ^M di terminal, tetapi ini adalah karakter baris baru khusus.

    screen -S minecraft -X stuff "stop^M"
    

Kedua, Catatan tentang perilaku layar yang tidak menentu. (Penjelasan dan solusi oleh Gilles)

Layar bermasalah saat menerima input ke sesi layar yang tidak pernah dilampirkan. Jika Anda menjalankan ini akan gagal:

screen -d -m -S minecraft zsh
screen -S minecraft -X stuff "stop^M"
screen -r minecraft

Tetapi jika Anda menjalankan ini akan berhasil:

screen -d -m -S minecraft zsh
screen -r minecraft (then disconnect with Ctrl-a-d)
screen -S minecraft -X stuff "stop^M"
screen -r minecraft

Terakhir, Anda dapat menggunakan tmux yang berperilaku jauh lebih baik bukannya screen .

GNU-Screen telah menjadi de-facto multiplexer terminal selama bertahun-tahun, tetapi sudah lama berhenti dikembangkan dan bug serta kebiasaan tidak diperbaiki. Tmux sedang dalam pengembangan aktif, menyertakan banyak fitur yang tidak dapat disentuh layar, dan perilakunya di luar kotak agak lebih intuitif. Juga, lebih baik didokumentasikan. Inilah cara mengonversi kode Anda:

# Start new detached tmux session with a named window pane running the java app
tmux new-session -d -n minecraft /usr/lib/java/bin/java [args]

# Send it keys to stop the mincraft server
tmux send-keys -t minecraft "stop^M"

Saya minta maaf telah menggali posting lama ini, tetapi ini akan membantu saya dalam upaya saya seandainya informasi ini tersedia pada saat saya mengalami masalah serupa. Ada banyak pertanyaan tentang cara mengirim perintah layar dalam skrip bash. Seperti menguliti kucing, ini mungkin dilakukan, tapi saya suka cara ini. Dengan ini, Anda dapat mengirim perintah apa pun atau mengucapkan apa pun hanya dengan memanggil fungsi say_this.

#!/bin/bash

say_this()
{
    screen -S minecraft -p 0 -X stuff "$1^M"
}

say_this "say Saving world"
say_this "save-off"
say_this "save-all"
...

Ini dengan ssh!

#!/bin/bash

say_this()
{
    # Dont forget to set NAME or whatever
    ssh -p 8989 192.168.1.101 screen -S $NAME -p 0 -X stuff \"$1^M\"
}

say_this "say test"
say_this "say [email protected]#$%^&*()<>?This string will work!"

Linux
  1. Bagaimana Cara Boot Ke Mode Teks Benar?

  2. Pilih teks menggunakan keyboard di shell linux

  3. Memusatkan teks di layar dengan SFML

  1. Linux – Mengirim Input Teks ke Layar Terpisah?

  2. Mengirim Input Ke Sesi Layar Dari Luar?

  3. Ganti nama sesi layar

  1. Bagaimana Cara Kerja Input Keyboard Dan Output Teks?

  2. Layar Gnu:Cetak Sesi Terpisah Ke Stdout?

  3. Linux – Nonaktifkan Pengosongan Layar Pada Konsol Teks?