/ dev / tty: tidak ada perangkat atau alamat tersebut - hanya dalam skrip


6

Aku mencabut rambutku karena ini. Saya telah memeriksa semua hasil google untuk / dev / tty: tidak ada perangkat atau alamat seperti itu, tidak ada yang berlaku untuk apa yang saya lakukan / tidak ada solusi yang berhasil.

Saya memiliki skrip yang ssh'es ke komputer lain (menggunakan kunci publik) dan menjalankan dirinya sendiri (dengan parameter yang berbeda - tidak loop). Sebut rpmInstallScript.bash ini

Pada satu titik dalam skrip, ia menjalankan rpm -ivh untuk menginstal beberapa paket RPM. Selama instalasi dari salah satu paket ini, sebuah file diletakkan di / var / tmp disebut rpm-tmp. [6 karakter acak]

File ini adalah skrip, dan saya kira itu dijalankan pada beberapa titik selama instalasi rpm.

Dalam skrip, ada beberapa kejadian

echo [something] > /dev/tty 

atau

echo [something] | tee [something] > /dev/tty.

Semua kejadian ini gagal dengan / dev / tty: tidak ada perangkat atau alamat tersebut. Jika saya ssh ke mesin secara manual dan baik paket rpm sendiri, jalankan skrip rpm-tmp atau jalankan rpmInstallscript.bash, itu berfungsi dengan baik.

Saya terhubung ke mesin jarak jauh dengan ssh -t, oleh karena itu harus ada tty, benar?

Saya tidak melihat mengapa ini tidak berhasil, terutama karena melakukannya secara manual, bahkan tanpa opsi -t, berfungsi dengan baik. Satu-satunya hal yang dapat saya pikirkan adalah bahwa ini bukan sesi interaktif - tetapi / dev / tty masih ada, benar?

Edit - hasil kesalahan dari:

ssh -t root@[machine] -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <<DONE
./rpmInstallScript.bash

di mana rpmInstallScript.bash menjalankan rpm -ivh, skrip yang dihasilkan ditempatkan di / var / tmp menggunakan> / dev / tty - inilah yang gagal

Edit lagi: menggunakan -tt memberi:

tcgetattr: Inappropriate ioctl for device

Hanya ketika menjalankan dari skrip - secara manual menjalankan ssh -tt dan kemudian echo test> / dev / tty berfungsi dengan baik.

Saya hanya bisa berasumsi ini adalah kegagalan untuk memaksa-menciptakan tty.

Apakah ada cara lain untuk 'menghasilkan' tty? Bisakah saya memalsunya dengan membuat file bernama / dev / tty?


The -tpilihan harus telah memecahkan ini. Coba letakkan set -xdi awal skrip, sehingga Anda dapat melihat semua hal yang dilakukannya. Mungkin ada sesuatu yang memeriksa variabel lingkungan seperti $TERMdan melepaskan dari terminal ketika ini tidak diatur.
Barmar

Saya tahu apa yang dilakukannya - bukan itu masalahnya. Mencoba mengirim output ke / dev / tty. Masalahnya adalah bahwa perangkat itu mengklaim tidak ada
Brydon Gibson

Saya tahu itu. Saya berharap Anda akan melihat sesuatu sebelum itu yang menjelaskan bagaimana itu terputus dari terminal.
Barmar

ah - Saya mengerti maksud Anda, saya akan mencobanya
Brydon Gibson

Jika Anda masih mengalami masalah, harap edit pertanyaan Anda untuk memasukkan bagian yang relevan dari skrip ini.
Kenster

Jawaban:


2

Coba -ttlihat apakah itu berfungsi.

Dari halaman ssh man,

Multiple -t options force tty allocation, even if ssh has no local tty.


Mengedit pos - ini gagal dengan kesalahan [terkait] yang lain
Brydon Gibson
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.