Masalah saya adalah bahwa saya perlu mengatur beberapa variabel, dan menampilkan beberapa baris setiap kali saya masuk ke ssh shell, dan pada saat yang sama saya harus dapat menggunakan sftp untuk tarnsfer file melalui Filezilla.
Sekarang, sesuai dengan FAQ openssh di http://www.openssh.org/faq.html , jika skrip startup Anda menggemakan segala jenis output, itu kacau dengan sftp. Jadi itu tertunda tanpa batas waktu, atau kesalahan dengan "Koneksi ditutup oleh server dengan kode keluar 128".
Saya telah mencoba solusi seperti memindahkan .bashrc ke .bash_profile, atau menggunakan kode berikut di .bashrc:
if [ "$TERM" != "dumb" ]
then
source .bashc_real
fi
Dan:
if [ "$TERM" = "xterm" ]
then
source .bashc_real
fi
Namun, tidak ada yang berhasil. Terminal shell saya adalah bash, dan saya terhubung ke sftp dengan filezilla.
.bashrc
akan sumberscp
ataussh host command
.Bash
dipanggil olehscp
ataussh host command
memang non-interaktif . Saya baru saja menemukan ini di manual bash: "Bash mencoba untuk menentukan kapan sedang dijalankan dengan input standar yang terhubung ke koneksi jaringan , seperti ketika dieksekusi oleh daemon shell jarak jauh, biasanya rshd, atau shell aman daemon sshd . Jika bash menentukan sedang dijalankan dengan cara ini, ia membaca dan mengeksekusi perintah dari~/.bashrc
, jika file itu ada dan dapat dibaca. " Inilah sejarah yang menarik .Jika Anda menggunakan csh:
Dan jika bash:
atau sebagai alternatif menggunakan bash regular expressions:
Garis-garis ini harus mendahului garis-garis di mana Anda ouput / echo sesuatu kembali.
sumber
$?var
dalamcsh
pengembalian 1 jikavar
didefinisikan dan 0 sebaliknya.$-
inbash
akan memilikii
char dalam nilainya jika shell bersifat interaktif.Solusi Mike juga bekerja untuk saya. Tetapi karena shell default saya adalah TCSH, saya harus sedikit mengedit perbaikannya sebagai berikut (dalam .tcshrc):
Saya pikir saya akan berbagi untuk keuntungan semua orang.
sumber
Saya suka beberapa solusi lain yang disebutkan di sini lebih baik, tapi saya pikir saya membuang solusi yang saat ini saya gunakan pada bash dan csh VMs untuk mencegah SFTP terputus karena perintah gema dalam skrip startup saya, kalau-kalau ada yang menemukan informasi bermanfaat .
Dalam BASH:
Dalam csh:
Ini kekuatan yang agak kasar, tetapi berhasil.
sumber
Inilah baris pertama dari
.bashrc
file (default) saya :Pemeriksaan untuk sesi interaktif menghindari mengacaukan SCP, SFTP atau
ssh remote-host command
mode.Tanpa ini, jika file Anda
.bashrc
menggunakanecho
atau beberapa hal lain mencetak di stdout, Anda mungkin mendapatkan kesalahan seperti ini:Received message too long 168435779
protocol error: unexpected <newline>
sumber