Pertanyaan Mengapa saya harus menjalankan "/ bin / bash --login"


Saya baru saja menyiapkan server Ubuntu 13.10 baru dengan Ruby 2.1.1 diinstal rvm.

Masalahnya adalah bahwa setiap kali saya beralih ke "rel" pengguna (pengguna yang saya pasang ruby ​​dan rel dengan) saya harus menjalankan /bin/bash --login sebelum Ubuntu mengenali ruby, rel atau rvm diinstal.

Semoga seseorang tahu:

  1. Apa yang dilakukan oleh perintah di atas?
  2. mengapa saya harus menjalankannya?
  3. dan apa yang bisa saya lakukan untuk menyelesaikannya sekali dan untuk semua? :)

Bantuan apa pun dihargai!


10
2018-04-08 08:59


asal


Bagaimana Anda beralih ke "rel" pengguna (biasa su? atau sesuatu seperti itu su -l atau su --?). Apa shell login untuk "rel" pengguna? Apakah Anda memodifikasi variabel PATH pengguna dan jika demikian di mana file (~/.profile atau ~/.bashrc atau ~/.bash_profile atau ... ?) - steeldriver
Saya melihat sekarang bahwa masalah hanya terjadi ketika saya menggunakan perintah su untuk beralih dari root ke pengguna rel. Ketika saya ssh dengan pengguna rel masalah ini tidak terjadi. Namun saya masih ingin tahu apa / bin / bash --login. :) - Ole Henrik Skogstrøm


Jawaban:


Kedengarannya seperti lingkungan yang diperlukan untuk sistem untuk menemukan komponen ruby ​​yang terinstal ditentukan dalam file yang hanya dibaca untuk shell login. Halaman manual bash memiliki ini untuk mengatakan tentang perbedaan antara shell login dan shell non-login:

INVOCATION
   A  login shell is one whose first character of argument zero is a -, or
   one started with the --login option.

dan

   When bash is invoked as an interactive login shell, or as a non-inter‐
   active shell with the --login option, it first reads and executes  com‐
   mands  from  the file /etc/profile, if that file exists. After reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in  that order, and reads and executes commands from the first one that
   exists and is readable.  

sedangkan

   When an interactive shell that is not a login shell  is  started,  bash
   reads  and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if
   these files exist. 

Oleh karena itu jika variabel lingkungan ruby ​​berada /home/rails/.profile atau /etc/profile misalnya, mereka akan ditambahkan ke lingkungan shell

  • dengan secara eksplisit menerapkan shell login menggunakan su -l rails atau su --login rails atau tulisan cepat su - rails
  • ketika pengguna rails masuk melalui SSH
  • dengan memulai subkulit sebagai bash --login setelah login

Jika Anda ingin lingkungan ruby ​​diatur terlepas dari bagaimana Anda beralih ke pengguna rails, Anda dapat memindahkan definisi variabel yang relevan ke pengguna ~/.bashrc sebagai gantinya.


10
2018-04-08 14:43



Hmmm, ok, saya rasa saya perlu contoh bagian terakhir. Saya baru mengenal linux dan ubuntu. Apa definisi variabel yang relevan? Dalam file apa yang mereka tulis sekarang? bisakah kamu memberi saya contoh? Ini sedikit teoritis. - Ole Henrik Skogstrøm


Saya tahu bahwa pertanyaan ini ditanyakan 2 tahun yang lalu, tetapi jika seseorang (seperti saya) masih menghadapinya: @steeldriver benar - Anda kehilangan sesuatu di bashrc yang Anda miliki di salah satu dari 3 file tersebut. Dalam kasus saya, saya hanya perlu menambahkan baris ini ke saya ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

1
2017-07-07 15:00