GNU/Linux >> Belajar Linux >  >> Linux

Gunakan .bashrc tanpa merusak sftp

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.


Linux
  1. Gunakan Ts Tanpa Kehilangan Nilai Keluar?

  2. Gunakan Variabel Di Dalam {} Ekspansi Tanpa `eval`?

  3. Shell Mana yang Harus Saya Gunakan – Tcsh Vs Bash??

  1. Gunakan SFTP dan SCP

  2. Sejarah Bash tanpa nomor baris

  3. bagaimana cara menggunakan kill SIGUSR2 di bash?

  1. Bash:ls * tanpa pengelompokan folder

  2. SSH tanpa sumber .bashrc

  3. Memulihkan ~/.bashrc tanpa menggunakan perintah bash