ubuntuusers.de

bash -l und $0

Status: Gelöst | Ubuntu-Version: Ubuntu 24.04 (Noble Numbat)
Antworten |

Forumsnutzer

Anmeldungsdatum:
10. April 2021

Beiträge: 128

Kurze Frage:

Ich führe im Terminal bash -l aus starte eine neue Instanz als Anmelde-Shell.

$ bash -l
$ echo $0
bash

Müsste nicht ein Bindestrich erscheinen vor dem "bash" als Kennzeichen für eine Anmelde-Shell? Warum tut es nicht?

LG Forumsnutzer

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14596

Forumsnutzer schrieb:

Müsste nicht ein Bindestrich erscheinen vor dem "bash" als Kennzeichen für eine Anmelde-Shell? Woran tut es nicht?

Wie ist jetzt die Ausgabe von:

1
shopt login_shell

?
"echo $0" zeigt dir in diesem/deinem Fall, nur den Befehl den du eingegeben hast und das ist "bash (mit der Option "-l").

EDIT:

Z. B.:

1
2
:~$ echo $SHELL
/bin/bash
1
2
:~$ shopt login_shell
login_shell    	off
1
2
3
4
~$ bash -l
#
:~$ echo $0
bash
1
2
:~$ shopt login_shell
login_shell    	on

vs.

EDIT 2:

1
2
:~$ ssh <Host>
Enter passphrase for key '/home/<user>/.ssh/id_ed25519':
1
2
:~ $ echo $0
-bash
1
2
:~ $ shopt login_shell
login_shell    	on

Forumsnutzer

(Themenstarter)

Anmeldungsdatum:
10. April 2021

Beiträge: 128

Vielen Dank! Ok, die Ausgabe von shopt ändert sich zu "on" nach "bash -l". Aber was genau zeigt mir echo $0 dann genau an? Ich verstehe es bis jetzt nicht.

"echo $0" zeigt dir in diesem/deinem Fall, nur den Befehl den du eingegeben hast und das ist "bash (mit der Option "-l").

Inwiefern "der Befehl du du eingebenen hast"? Den zur Anmeldung?

Das behauptet die KI:

In einer Anmelde-Shell (Login Shell): Wenn die Shell als Anmelde-Shell gestartet wurde (z. B. über login, su -, ssh oder bash -l), wird $0 mit einem führenden Bindestrich (-) angezeigt, z. B. -bash. Das - ist ein Flag, das der Shell mitteilt, dass sie als Anmelde-Shell agieren soll.

Diese Behauptung scheint aber laut deiner Aussage nicht zuzutreffen. Ich kann im Netz tatsächlich gerade nirgendwo eine Erklärung finden.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14596

Forumsnutzer schrieb:

Das behauptet die KI:

Das was deine KI in diesem Fall sagt, ist nicht richtig. Schau dir mal (als normaler user) vor und nach der Eingabe von "bash -l", die Ausgabe (bash-Prozesse) von:

ps aux | grep [b]ash

an.
Dann mach mal einen login mit z. B. "su -" oder mit "sudo -i" oder mit "ssh <Host>" und schau dir dann die Ausgabe (bash-Prozesse) von:

ps aux | grep [b]ash

an.

Forumsnutzer

(Themenstarter)

Anmeldungsdatum:
10. April 2021

Beiträge: 128

Danke! Also ich konnte für mich schon verifizieren, dass bash -l keine Anmelde-Shell initiiert.

Was $0 genau bedeutet, habe ich aber noch nicht so ganz verstanden, aber vielleicht ist das ein anderes Thema.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14596

Forumsnutzer schrieb:

Was $0 genau bedeutet, habe ich aber noch nicht so ganz verstanden, ...

$0 beinhaltet (oder ist) (der Pfad und) der Name des Programms. Siehe z. B. auch die Ausgaben von:

1
2
bash -xc 'echo $0'
sh -xc 'echo $0'

"echo $0" ist keine gute Möglichkeit, um nach der login-shell zu schauen. Besser ist:

shopt login_shell

Forumsnutzer

(Themenstarter)

Anmeldungsdatum:
10. April 2021

Beiträge: 128

Vielen Dank!

Antworten |