Output SSH tidak dilindungi garis?


35

Saya menjalankan skrip pada mesin jarak jauh seperti ini:

ssh $host "pip install -r /path/to/requirements.txt"

Tetapi output tidak buffer line; alih-alih melihat satu baris dikembalikan pada satu waktu, semua baris (~ 10) semuanya dicetak sekaligus saat koneksi berakhir.

Ada apa dengan ini? Apakah ada cara untuk memaksa mereka menjadi buffer line?

(juga, untuk menyatakan yang jelas: ketika saya ssh ke $hostdan menjalankan perintah "secara manual", outputnya adalah buffered line, seperti yang diharapkan)

Jawaban:


45

Gunakan ssh -t ...untuk memaksa alokasi pseudo-tty (yang adalah apa yang Anda dapatkan ketika Anda masuk secara normal melalui ssh.)


sayangnya, tidak membantu. Ini juga mungkin masalah dengan MTU, tetapi tidak ada yang membantu
Nick Roz

Lihat komentar Magnus 'di bawah ref menggunakan -tt- yang bekerja untuk saya ketika -t tidak.
Tom Dalton

23

Untuk sedikit memperluas jawaban Ryan Fox: Banyak program (kebanyakan? - ini adalah default untuk semua program C) line-buffer stdout ketika mereka sedang berbicara dengan terminal, tetapi sepenuhnya buffer sebaliknya. (Standar C menentukan bahwa stdout awalnya buffered penuh ketika itu "dapat ditentukan untuk tidak merujuk ke perangkat interaktif".)

Jadi yang Anda lihat adalah bahwa output dari program yang Anda jalankan dari jarak jauh (seperti yang diberikan ke stdout) tidak didukung oleh garis; ssh baru saja melewati apa yang didapatnya saat mendapatkannya. (Saya pikir ssh sebenarnya tidak memiliki buffering sama sekali pada outputnya - itu akan menjadi cara yang paling ajaib untuk memastikan bahwa pengguna melihat apa yang dimaksud dengan program jarak jauh.)


Seorang pengguna anonim menyarankan bahwa stdout sepenuhnya buffered, bukan buffered baris
Michael Mrozek

Dave Vandervies mengatakan kepada saya out-of-band bahwa dia adalah orang yang melakukan pengeditan, dan itu benar (yaitu, stdout pada awalnya sepenuhnya buffered, bukan line buffered).
David Wolever

6

Untuk lebih memperluas jawaban Ryan Fox, ssh -ttidak berhasil juga untuk saya, tetapi ssh -ttternyata berhasil. Lihat halaman man ssh tentang -t:

Opsi -t ganda memaksa alokasi tty, bahkan jika ssh tidak memiliki tty lokal

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.