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 $host
dan menjalankan perintah "secara manual", outputnya adalah buffered line, seperti yang diharapkan)
-tt
- yang bekerja untuk saya ketika -t tidak.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.)
sumber
Untuk lebih memperluas jawaban Ryan Fox,
ssh -t
tidak berhasil juga untuk saya, tetapissh -tt
ternyata berhasil. Lihat halaman man ssh tentang -t:sumber