Perché devo eseguire "/ bin / bash --login"


12

Ho appena installato un nuovo server Ubuntu 13.10 con ruby ​​2.1.1 installato attraverso rvm.

Il problema è che ogni volta che passo all'utente "rails" (l'utente con cui ho installato ruby ​​e rails) devo correre /bin/bash --loginprima che Ubuntu riconosca che ruby, rails o rvmè installato.

Spero che qualcuno lo sappia:

  1. Cosa fa il comando sopra?
  2. perché devo eseguirlo?
  3. e cosa posso fare per risolverlo una volta per tutte? :)

Qualsiasi aiuto è apprezzato!


2
Come stai passando alle "rotaie" dell'utente (semplice su? O qualcosa di simile su -lo su --?). Qual è la shell di accesso per "rotaie" utente? Hai modificato la variabile PATH dell'utente e, in tal caso, in quale file ( ~/.profileo ~/.bashrco ~/.bash_profileo ...?)
steeldriver

Vedo ora che il problema si verifica solo quando utilizzo il comando su per passare da utente root a rails. Quando mi collego con l'utente delle rotaie questo problema non si verifica. Comunque vorrei ancora sapere cosa fa / bin / bash --login. :)
Ole Henrik Skogstrøm,

Risposte:


11

Sembra che l'ambiente necessario al sistema per trovare i componenti ruby ​​installati sia specificato in un file che viene letto solo per le shell di login. La pagina di manuale di bash ha questo da dire sulla differenza tra shell di login e shell non di login:

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

e

   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.  

mentre

   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. 

Pertanto, se le variabili di ambiente ruby ​​sono presenti /home/rails/.profileo, /etc/profilead esempio, verranno aggiunte all'ambiente shell

  • invocando esplicitamente una shell di accesso utilizzando su -l railso su --login railso la scorciatoiasu - rails
  • quando l'utente railsaccede tramite SSH
  • avviando una subshell come bash --logindopo il login

Se si desidera impostare l'ambiente ruby ​​indipendentemente da come si passa all'utente rails, è possibile invece spostare le definizioni delle variabili rilevanti nell'utente ~/.bashrc.


Hmmm, ok, penso di aver bisogno di un esempio dell'ultima parte. Sono nuovo di Linux e Ubuntu. Quali sono le definizioni variabili rilevanti? In quale file sono scritti ora? Puoi farmi un esempio? Questo è un po 'teorico.
Ole Henrik Skogstrøm,

5

So che questa domanda è stata posta 2 anni fa, ma nel caso in cui qualcuno (come me) lo stesse ancora affrontando: @steeldriver ha ragione - ti manca qualcosa nel tuo bashrcche hai in uno di quei 3 file. Nel mio caso, dovevo solo aggiungere questa riga alla mia ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.