$HOME, was bewirkt das $?

Hallo,
$HOME/ = /home/michae1/ = /home/USER/ = ~
Gut, das scheint ja zu stimmen. Aber wie bewirkt das § am Anfang, dass man §HOME auch beliebig anders schrieben kann, z.B. auch §homE oder §Home.

Frage, warum spiel hier im Terminal die Groß-, bzw. Kleinschreibung keine Rolle mehr?

Das sollte ein $ sein und nicht ein §.
Das ist nötig um auf den Inhalt der (bash-)Variable zuzugreifen, siehe
https://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-5.html

Äh, nein. DIe Groß-/Kleinschreibung ist bei der Variable schon wichtig:

user@host:~ $ echo $home

user@host:~ $ echo $HOME
/home/user
1 Like

Ja, war ein Tippfehler, es sollte natürlich ein $ sein.

Das mit der Variable verstehe ich gar nicht, hoffe es vorläufig auch nicht zu brauchen.

Aber probiere es mal aus. Die Groß- und Kleinschreibung spielt da offensichtlich keine Rolle.
Auch das hier wundert mich:
cd $HOME = cd $home = $h - das ist alles das Gleiche, nämlich ~
grafik

eigentlich eine interessante Frage

aber nicht durchgehend konsistent, denn:
/home/USER/ != $HOME/

/home/USER wird häufig in Anleitungen und Beschreibungen verwendet
mit dem beim Leser implizierten Verständnis, daß “USER” für den tatsächlichen Benutzernahmen steht

Auf die Weise kann man auch sicherstellen, daß einfaches copy/paste nicht direkt katastrophale Auswirkungen hat,
denn /home/USER gibt es nicht tatsächlich und solche Kommandos werden immer fehlschlagen -
USER steht immer für den tatsächlichen Nutzernamen

das war mir tatsächlich neu - ist mir noch nie aufgefallen

obwohl
echo $home

nichts zurückgibt

während
echo $HOME
das tatsächliche Heimatverzeichnis als Antwort liefert

1 Like

Hallo Nachlese,
natürlich meine ich bei /home/USER mit USER meinen Benutzername. Wie schreibt man [USER] wenn es nur der Stellvertreter für den richtigen Namen sein soll?

Und was meinst Du mit nicht konsistent?

aber nicht durchgehend konsistent, denn:
/home/USER/ != $HOME/

Könntest Du mir das erklären.

… ganz genau so
/home/USER

Dann weiß eigentlich jeder, daß der tatsächliche Name gemeint ist

Man kann sich natürlich auch noch extra sprachlich/schriftlich verrenken um ganz besonders klar zu kommunizieren
und z.B.
/home/your_username oder sowas schreiben …

Ich versuchs nochmal:
$HOME ist eine Variable, die im Klartext und für das Betriebssystem bzw. die shell auf das Heimatverzeichnis des Benutzers verweist

/home/USER sagt weder der shell noch dem Betriebssystem etwas - das ist etwas, was für Menschen gedacht ist, die Beschreibungen/Anleitungen lesen

nicht obwohl…
cd $home
ist das gleiche wie nur
cd
weil $home ein leerer String ist (wie Du schon geschrieben hattest).
Mach mal die Gegenprobe:
cd $xyz
da wanderst Du auch ins Homeverzeichnis, aus dem gleichen Grund.

viele Grüsse gosia

2 Likes

aha! Danke!

… ich sagte ja:
eigentlich eine interessante Frage

Man merkt erst was man alles nicht weiß wenn man versucht sie mit dem vorhandenen Halbwissen zu beantworten. :nerd_face:

Das erklärt mir, warum ich HOME schreiben kann wie ich will. Das heißt, wenn ich cd $ schreibe, dann muss nur noch irgend ein Buchstabe hinter das $ und schon bin ich im ~, ganz gleich welche Buchstaben und ob groß oder klein.

Ich frage ja deshalb, weil ich meine Notizen über das Installieren eines Windows-Programms über Wine und das Terminal besser verstehen möchte. Da habe ich z.B. diese Einträge:

mkdir -pv $HOME/Wine/MyPhoneExplorer/{prefix,MyPhoneExplorer}
export WINEPREFIX=$HOME/Wine/MyPhoneExplorer/prefix
export WINEPATH=$HOME/Wine/MyPhoneExplorer/MyPhoneExplorer
wine $HOME/Downloads/MyPhoneExplorer_Setup_1.9.0.exe

Und dort möchte ich dieses $HOME einfach durch das ~ ersetzen.
Ist das korrekt?

naja, nicht ganz. Es macht wenig Sinn, in einem Skript $home zu verwenden, nur um einen leeren String zu erhalten, aber das meinst Du wahrscheinlich auch nicht.
Aber

export WINEPREFIX=$HOME/Wine/MyPhoneExplorer/prefix

und

export WINEPREFIX=~/Wine/MyPhoneExplorer/prefix

z.B. läuft für WINEPREFIX auf das gleiche hinaus.
Frage mich nur, warum Du das ersetzen möchtest?

viele Grüsse gosia

Hallo gosia,
ich möchte in meine Aufzeichnungen Platz sparen und ich möchte das, was ich in diesem Forum gelernt habe, also diese Aufzeichnungen verstehen lernen. Es ist meine Art, das neue Wissen zu vertiefen.
/home/USER-NAME, bzw. /home/michae1/ verstehe ich ja, auch diese Tiled: ~.
Und deshalb dieser Versuch, meine Notizen zu vereinfachen.
Sind beide folgenden Befehle auch identisch? (müsste ja so sein).

wine $HOME/Downloads/MyPhoneExplorer_Setup_1.9.0.exe
wine ~/Downloads/MyPhoneExplorer_Setup_1.9.0.exe

in dieser Form schon. Aber nicht mit $~
Die Tilde allein, also
~
gibt tatsächlich den Wert von
$HOME
zurück.

viele Grüsse gosia

Ja, habe den Fehler schon entdeckt und oben korrigiert.

allerdings gibt es bei der Verwendung der Tilde ~ auch Fallstricke, wenn z.B. Quoting ins Spiel kommt.
echo "$HOME"
gibt z.B. bei mir
/home/gn
zurück, aber
echo "~"
gibt nur
~
nicht das, was man möchte.
Ausführlicher kannst Du das hier nachlesen
https://mywiki.wooledge.org/BashPitfalls#echo_.22.2BAH4.22
und noch ausführlicher und quasi “amtlich”, jedoch komplizierter hier

viele Grüsse gosia

Das ist eine Quälerei für mich, fast wie Chinesisch, weil in jedem Satz viele Begriffe stehen, die ich nicht kenne.

Aber weil Du Dir die Mühe gemacht hast, habe ich mir auch welche gemacht und lese trotzdem. Dabei stolpere ich auf folgendes:
Quoting path parameters that are expressed relative to a user’s home directory should be done using $HOME rather than ‘~’.
Also sind beide Ausdrücke doch nicht gleich?
Zurück zu meiner Frage:
Wenn ich im Terminal Programme über Wine installiere, welcher Ausdruck ist da der beste:

$HOME 
~ 
/home/michae1

(Ich mache aber für heute Schluss, bin gespannt, was ich morgen zu leben bekomme. Danke an Euch).

um Himmelswillen, Du musst das nicht sofort und auf einmal studieren. In 99% aller Fälle funktioniert das schon mit der Tilde. Aber mit $HOME bist Du eben auf der sicheren Seite, zumindest wenn Du mal Shell-Skripte schreibst. Und der Schwerpunkt bei dem Zitat

liegt eben auf “Quoting”
was ja durchaus bei solchen Verzeichnisnamen wie “/home/gn/meine Fotos/” (mit Leerzeichen!) die vor allem manchmal bei Ex-Windows-Usern beliebt sind notwendig sein kann.
Insofern meine persönliche Antwort auf deine Frage

eindeutig
$HOME

viele Grüsse und gute Nacht gosia

1 Like

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.