Solusi 1:
Coba lakukan ini sebagai gantinya
if [ "$SSH_TTY" ]
then
source .bashc_real
fi
Solusi 2:
Jawaban Mike mungkin akan berhasil. Namun perlu diperhatikan bahwa Anda dapat menyelesaikan ini dengan hati-hati memilih file startup mana yang akan dimasukkan ke dalam verbose. Dari halaman bash man:
Ketika bash dipanggil sebagai shell login interaktif, atau sebagai shell non-interaktif dengan opsi --login, pertama-tama bash membaca dan mengeksekusi perintah dari file /etc/profile, jika file tersebut ada. Setelah membaca file itu, ia mencari ~/.bash_profile, ~/.bash_login, dan ~/.profile, dalam urutan itu, dan membaca serta mengeksekusi perintah dari yang pertama yang ada dan dapat dibaca. Opsi --noprofile dapat digunakan saat shell dimulai untuk menghambat perilaku ini.
Ketika shell interaktif yang bukan merupakan shell login dimulai, bash membaca dan menjalankan perintah dari ~/.bashrc, jika file itu ada. Ini mungkin dihambat dengan menggunakan opsi --norc. Opsi --rcfile file akan memaksa bash untuk membaca dan menjalankan perintah dari file alih-alih ~/.bashrc.
Alat sftp/scp memulai shell non-login interaktif, jadi .bashrc akan bersumber. Banyak sumber distribusi .bashrc dari .bash_profile atau sebaliknya, sehingga bisa membingungkan. Trik yang bagus untuk menguji kebersihan lingkungan login Anda adalah dengan ssh dengan perintah, yang mensimulasikan cara koneksi scp/sftp yang sama. Misalnya:ssh myhost /bin/true
akan menunjukkan dengan tepat apa yang dilihat scp/sftp saat mereka terhubung.
Demo sederhana:
[email protected]:~$ echo "echo Hello from .profile" > .profile
[email protected]:~$ echo "echo Hello from .bashrc" > .bashrc
sazerac:~ insyte$ ssh mazer /bin/true
Hello from .bashrc
sazerac:~ insyte$
[email protected]:~$ rm .bashrc
sazerac:~ insyte$ ssh mazer /bin/true
sazerac:~ insyte$
Tes pertama akan menyebabkan scp/sftp/rsync dll. rusak. Versi kedua akan berfungsi dengan baik.
Solusi 3:
Jika Anda menggunakan csh:
if ($?prompt)
... interactive stuff ...
Dan jika itu bash:
if [[ $- == *i* ]]; then
... interactive stuff ...
fi
atau sebagai alternatif menggunakan ekspresi reguler bash:
if [[ $- =~ i ]]; then
... interactive stuff ...
fi
Baris-baris ini harus mendahului baris di mana Anda mengeluarkan/menggemakan sesuatu kembali.