Shell-Skripte und Verzeichniswechsel: Warum Dein Skript nicht das Verzeichnis wechselt – und wie Du das Problem löst

Vielleicht kennst Du das Problem: Du hast unter Ubuntu oder Linux Mint ein einfaches Shell-Skript geschrieben, das nur das Verzeichnis wechseln soll. Doch beim Aufruf des Skripts merkst Du, dass das Verzeichnis in Deiner aktuellen Shell nicht gewechselt wird, obwohl der cd-Befehl im Skript steht.

In diesem Artikel erkläre ich Dir, warum das passiert und wie Du es richtig machst.

Das Problem: Skripte laufen in einer Subshell

Wenn Du ein Shell-Skript normal ausführst, passiert das in einer Subshell. Das bedeutet, dass eine neue Shell-Instanz geöffnet wird, die das Skript abarbeitet. Sobald das Skript fertig ist, wird die Subshell geschlossen und Du landest wieder in Deiner ursprünglichen Shell – ohne dass Änderungen wie der Verzeichniswechsel übernommen werden.

Das ist der Grund, warum Dein cd-Befehl zwar innerhalb des Skripts funktioniert, aber nach dem Ende des Skripts Dein Verzeichnis unverändert bleibt.

Die Lösung: Das Skript im aktuellen Shell-Kontext ausführen

Damit das Verzeichnis in Deiner aktuellen Shell geändert wird, musst Du das Skript im aktuellen Shell-Kontext ausführen. Dazu gibt es zwei einfache Möglichkeiten: den Befehl source oder den Punkt ..

Beispiel:

Nehmen wir an, Du hast ein Skript namens wechselverzeichnis.sh, das so aussieht:

#!/bin/bash
cd /pfad/zu/deinem/verzeichnis

Anstatt es wie gewohnt so aufzurufen:

./wechselverzeichnis.sh

musst Du es so aufrufen:

source wechselverzeichnis.sh

oder:

. wechselverzeichnis.sh

Was passiert beim „Sourcen“?

Durch den Aufruf mit source (oder dem Punkt .) wird das Skript nicht in einer Subshell ausgeführt, sondern direkt im Kontext Deiner aktuellen Shell. Alle Änderungen, die das Skript an der Umgebung vornimmt, wie z.B. der Verzeichniswechsel, gelten dann auch für Deine Shell-Sitzung.

Was ist, wenn ich das Skript normal ausführen will?

Wenn Du das Skript weiter wie gewohnt ausführst, also mit ./wechselverzeichnis.sh, dann bleibt es dabei, dass es in einer Subshell läuft. Das kann für andere Arten von Skripten völlig ausreichend sein, aber für Dinge wie cd, die Änderungen an der aktuellen Umgebung vornehmen sollen, ist es nicht die richtige Methode.

Fazit

Wenn Du ein Shell-Skript geschrieben hast, das in Deinem aktuellen Shell-Kontext Änderungen vornehmen soll, wie z.B. den Wechsel des Verzeichnisses mit cd, dann musst Du das Skript „sourcen“ – also mit source oder . aufrufen. Dadurch führst Du das Skript im gleichen Kontext aus, und die Änderungen gelten direkt für Deine aktuelle Shell-Sitzung.

So passt Du Deine Swap-Datei unter Linux an

Dein System wird langsamer, und Du hast bemerkt, dass der Arbeitsspeicher (RAM) oft ausgelastet ist? Dann könnte es Zeit sein, die Swap-Datei zu vergrößern! In diesem Artikel erkläre ich Dir Schritt für Schritt, wie Du Deine Swap-Datei anpassen kannst, um die Leistung Deines Linux-Systems zu optimieren.

Was ist Swap?

Bevor wir loslegen, ein kurzer Überblick: Die Swap-Datei fungiert als eine Art Erweiterung des Arbeitsspeichers (RAM). Wenn Dein physischer RAM voll ist, speichert Linux weniger genutzte Daten auf der Festplatte, um den RAM für aktivere Prozesse freizuhalten. Dies verhindert, dass das System einfriert oder verlangsamt, wenn es zu wenig RAM gibt.

Warum die Swap-Datei vergrößern?

Obwohl die Nutzung der Swap-Datei das System verlangsamen kann, ist es immer noch besser, als wenn das System komplett überlastet wird. Falls Du speicherintensive Anwendungen wie Entwicklungsumgebungen, Videobearbeitung oder Virtualisierung nutzt, könnte es ratsam sein, die Größe der Swap-Datei anzupassen.

Schritt-für-Schritt Anleitung zum Vergrößern der Swap-Datei

1. Swap-Datei deaktivieren

Zuerst müssen wir die aktuelle Swap-Datei deaktivieren, bevor wir sie vergrößern. Keine Sorge, Dein System wird weiterhin laufen, solange Du genügend freien RAM hast. Öffne ein Terminal und gib folgenden Befehl ein:

sudo swapoff /swapfile

2. Alte Swap-Datei entfernen (optional)

Falls Du möchtest, kannst Du die alte Swap-Datei löschen, um Platz zu schaffen. Nutze dafür folgenden Befehl:

sudo rm /swapfile

3. Neue Swap-Datei erstellen

Jetzt erstellen wir eine neue Swap-Datei mit der gewünschten Größe. Nehmen wir an, Du möchtest eine 4 GB große Swap-Datei:

sudo fallocate -l 4G /swapfile

Falls fallocate auf Deinem System nicht funktioniert, kannst Du auch diesen alternativen Befehl verwenden:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

4. Berechtigungen festlegen

Damit die Swap-Datei sicher ist, setzen wir die Berechtigungen:

sudo chmod 600 /swapfile

5. Swap-Datei initialisieren

Nun formatieren wir die neue Swap-Datei, damit sie als Swap-Speicher verwendet werden kann:

sudo mkswap /swapfile

6. Swap-Datei aktivieren

Jetzt aktivieren wir die neue Swap-Datei:

sudo swapon /swapfile

7. Überprüfen, ob die Swap-Datei aktiv ist

Mit folgendem Befehl kannst Du überprüfen, ob die Swap-Datei korrekt aktiviert wurde:

swapon --show

Du solltest jetzt sehen, dass die neue Größe der Swap-Datei angezeigt wird.

8. Swap-Datei dauerhaft aktivieren

Damit die neue Swap-Datei nach jedem Neustart automatisch aktiviert wird, müssen wir sie in der /etc/fstab-Datei eintragen. Öffne die Datei mit einem Texteditor:

sudo nano /etc/fstab

Füge folgenden Eintrag hinzu, falls er nicht bereits vorhanden ist:

/swapfile none swap sw 0 0

Speichere die Datei und schließe den Editor.

Welche Swap-Größe ist sinnvoll?

Für ein System mit 8 GB RAM gibt es einige Richtlinien:

  • 8 GB Swap: Für normale Nutzung, ohne Ruhezustand, reicht das oft aus.
  • 12–16 GB Swap: Wenn Du speicherintensive Anwendungen nutzt oder den Ruhezustand verwenden möchtest, solltest Du eine größere Swap-Datei wählen.

Falls Dein System dennoch an die Grenzen stößt, kannst Du die Swap-Datei jederzeit vergrößern.

Fazit

Mit diesen einfachen Schritten kannst Du die Swap-Datei Deines Linux-Systems anpassen und vergrößern. Eine gut konfigurierbare Swap-Datei kann Dir helfen, die Leistung zu verbessern und Dein System stabil zu halten, auch wenn Dein Arbeitsspeicher ausgelastet ist.