Moin,
Problem mit su. Was will mir das sagen und warum funktioniert su - $USER nicht korrekt?
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-==============-==============-============================================ ii login 19990827-20 System login tools
drachi:[~] #su - hille << EOT
echo $HOME EOT
/root drachi:[~] #su - hille -c "echo $HOME" /root drachi:[~] #su - hille -c "echo ${HOME}" /root drachi:[~] #su - hille drachi:[hille] >echo $HOME /home/hille
H.
On Fri, Feb 23, 2001 at 10:25:55AM +0100, Hilmar Preusse wrote:
drachi:[~] #su - hille -c "echo ${HOME}" /root drachi:[~] #su - hille drachi:[hille] >echo $HOME /home/hille
Setz mal in der .bash_profile von hille eine Variable, z.B. export FOO="hier bin ich bei hille", und setz dieselbe Variable bei root auf "hier bin ich bei root".
Dann versuch das hier:
# su - hille -c "echo $FOO" * hier bin ich bei root # su - hille ** $ echo $FOO hier bin ich bei hille
Bei "su - $MYUSER -c $MYCOMMAND" macht er scheinbar zwar einen auf login, sourced aber die .bash_profile nicht, bei "su - $MYUSER" aber.
(*) bash wird mit UID{hille} als noninterktive login shell ausgeführt (**) bash wird mit UID{hille} als interaktive login shell ausgeführt
In beiden Fällen sollte die .bash_profile gesourced werden, wird sie aber nicht. Also scheint su den Fall (*) als noninteraktive nonlogin shell zu interpretieren (es ignoriert also das "-"). Warum das so ist, weiß ich auch nicht.
Gruß, Eric
On Friday 23 February 2001 10:25, Hilmar Preusse wrote:
Moin,
Problem mit su. Was will mir das sagen und warum funktioniert su - $USER nicht korrekt?
echo $HOME EOT
/root drachi:[~] #su - hille -c "echo $HOME" /root drachi:[~] #su - hille -c "echo ${HOME}" /root
völlig korrekt, da du keine interaktive Shell öffnest. Sie arbeitet also nur im Batch-Mode und übernimmt die Variablen der aufrufenden Shell (root-bash -> su user -> user-bash)
Du hast also auf die Dateirechte des Nutzers hille geschaltet aber nicht seine Initialisierungen ausgeführt.
drachi:[~] #su - hille drachi:[hille] >echo $HOME /home/hille
völlig korrekt, da das eine Login-Shell ist (die initialisiert sich).
Konrad
On 23.02.01 Konrad Rosenbaum (konrad.rosenbaum@t-online.de) wrote:
Moin,
völlig korrekt, da du keine interaktive Shell öffnest. Sie arbeitet also nur im Batch-Mode und übernimmt die Variablen der aufrufenden Shell (root-bash -> su user -> user-bash)
drachi:[~] #su - hille << EOT
echo $HOME EOT
/root
ist keine interaktive Shell? Doch wohl eher ein Grenzfall.
Dann kommt jetzt die blöde Frage: Wie greife ich auf eine Datei in $HOME des zu su'enden Nutzers zu, ohne $HOME explizit im Aufruf festzunageln, also möglichst mit Variablen.
H.
On Sat, Feb 24, 2001 at 10:56:24AM +0100, Hilmar Preusse wrote:
völlig korrekt, da du keine interaktive Shell öffnest. Sie arbeitet also nur im Batch-Mode und übernimmt die Variablen der aufrufenden Shell (root-bash -> su user -> user-bash)
drachi:[~] #su - hille << EOT
echo $HOME EOT
/root
ist keine interaktive Shell? Doch wohl eher ein Grenzfall.
Nee. Ob eine shell interaktiv ist, wird letztlich daran festgemacht, ob stdin und stdout Terminals sind oder nicht...
Gruß, Eric
On Fri, Feb 23, 2001 at 06:55:57PM +0100, Konrad Rosenbaum wrote:
On Friday 23 February 2001 10:25, Hilmar Preusse wrote:
Moin,
Problem mit su. Was will mir das sagen und warum funktioniert su - $USER nicht korrekt?
echo $HOME EOT
/root drachi:[~] #su - hille -c "echo $HOME" /root drachi:[~] #su - hille -c "echo ${HOME}" /root
völlig korrekt, da du keine interaktive Shell öffnest. Sie arbeitet also nur im Batch-Mode und übernimmt die Variablen der aufrufenden Shell (root-bash -> su user -> user-bash)
su - hille -c "echo $HOME"
^^^ Das ist eine minus.
aus man su:
OPTIONS - make this a login shell
==> also wird ~hille/.{bash_}profile gesourced
root@max:~> vi ~rf11/.bash_profile i echo 'ich bin die .bash_profile' ESC:wq root@max:~> su - rf11 -c "echo schnulli" ich bin die .bash_profile schnulli root@max:~>
Reinhard
On Fri, Feb 23, 2001 at 10:25:55AM +0100, Hilmar Preusse wrote:
drachi:[~] #su - hille << EOT
echo $HOME EOT
/root drachi:[~] #su - hille -c "echo $HOME" /root drachi:[~] #su - hille -c "echo ${HOME}" /root drachi:[~] #su - hille drachi:[hille] >echo $HOME /home/hille
Ganz einfach: $HOME innerhalb der "" wird schon vor Ausführung des su expandiert.
root@max:~> su - rf11 -c "echo $HOME" /root root@max:~> su - rf11 -c 'echo $HOME' /home/rf11 root@max:~>
Reinhard
On 24.02.01 Reinhard Foerster (rf11@inf.tu-dresden.de) wrote:
On Fri, Feb 23, 2001 at 10:25:55AM +0100, Hilmar Preusse wrote:
Moin,
drachi:[~] #su - hille << EOT
echo $HOME EOT
/root drachi:[~] #su - hille -c "echo $HOME" /root drachi:[~] #su - hille -c "echo ${HOME}" /root drachi:[~] #su - hille drachi:[hille] >echo $HOME /home/hille
Ganz einfach: $HOME innerhalb der "" wird schon vor Ausführung des su expandiert.
Yepp! Genau das. stellt sich nur noch die Frage, warum Fall 1 nicht funktioniert.
H.
On Sat, Feb 24, 2001 at 02:23:56PM +0100, Hilmar Preusse wrote:
On 24.02.01 Reinhard Foerster (rf11@inf.tu-dresden.de) wrote:
On Fri, Feb 23, 2001 at 10:25:55AM +0100, Hilmar Preusse wrote:
Moin,
drachi:[~] #su - hille << EOT
echo $HOME EOT
/root
...
Yepp! Genau das. stellt sich nur noch die Frage, warum Fall 1 nicht funktioniert.
Das macht bei mir Späne. Ich habe noch keine Ahnung warum.
root@max:~> su - rf11 << EOT
echo $HOME EOT
stty: standard input: Inappropriate ioctl for device /root root@max:~> echo $BASH_VERSION 2.03.0(1)-release root@max:~>
Reinhard
lug-dd@mailman.schlittermann.de