Warum ist die Farbe von .sh Dateien immernoch grün obwohl es umgestellt habe?
Ausgabe von ls -l
Ausgabe von $LS_COLORS
Die Änderung in dircolors datei:
Wir ihr in der dircolors sehen könnt habe ich .sh die Farbe verändert aber irgendwie wird das nicht umgesetzt aber wenn ich zum Beispiel bei “dir” mache dann wird das umgesetzt. Warum ? und was soll ich tun ?
Es sieht so aus, als ob dein Dateisystem die Farbe von bestimmten Dateitypen basierend auf ihrer Erweiterung standardmäßig festlegt. In UNIX-Systemen wie Linux kann die Farbe von Dateien je nach Dateityp automatisch festgelegt werden, um die Unterscheidung verschiedener Dateitypen zu erleichtern.
Die grüne Farbe von `.sh`-Dateien könnte daher standardmäßig für ausführbare Shell-Skripte festgelegt sein. Wenn du die Farbe ändern möchtest, könntest du versuchen, die Konfiguration deines Dateimanagers oder der Shell anzupassen, um die Zuweisung von Farben zu Dateitypen zu ändern.
Es ist auch möglich, dass bestimmte Tools oder Skripte die Farbe von Dateien automatisch ändern, unabhhängig von deinen Einstellungen. Es könnte hilfreich sein, zu überprüfen, ob dies der Fall ist und ob diese Tools die Farbe für `.sh`-Dateien festlegen.
Es scheint so, als ob die Einstellungen in deiner `.dircolors`-Datei nicht korrekt angewendet werden, wenn du deine Shell-Skripte auflistest. Dies kann verschiedene Gründe haben. Hier sind einige mögliche Lösungsansätze:
1. Stelle sicher, dass deine `.dircolors`-Datei korrekt konfiguriert ist und die gewünschten Farbeinstellungen für Shell-Skripte enthält. Überprüfe, ob die entsprechende Zeile für `.sh`-Dateien in der `.dircolors`-Datei richtig definiert ist.
2. Vergewissere dich, dass deine Shell die `.dircolors`-Datei beim Start richtig lädt. Du kannst dies in deiner Shell-Konfigurationsdatei (z.B. `.bashrc`, `.bash_profile`, `.zshrc`, etc.) überprüfen und sicherstellen, dass die Datei geladen wird.
3. Teste die Farbänderungen, indem du deine Shell neu startest oder indem du die Shell-Konfigurationsdatei aktualisierst, um die Änderungen darin zu reflektieren.
4. Überprüfe, ob die Umgebungsvariable `LS_COLORS` richtig gesetzt ist und auf deine `.dircolors`-Datei verweist. Du kannst dies mit dem Befehl `echo $LS_COLORS` überprüfen.
5. Eventuell liegt es an einer Inkonsistenz zwischen den Einstellungen in deiner `.dircolors`-Datei und den Standardeinstellungen deiner Shell. Stelle sicher, dass keine anderen Konfigurationen die Farbeinstellungen.
Am Ende entscheidet immer noch die Shell / das Terminal, welche Farben angezeigt werden. Standardmäßig ist auch nicht alles grün. Schaue mal in die Konfiguration der beiden; da wird irgendetwas überschrieben.
Sonst ist der Command soweit richtig:

ja aber wenn ich die /.dircolors Datei ändere und die Farben immernoch gleich bleiben ? dann müssten die neuen Farben immer von der /.bashrc eigentlich geladen werden
01 ist Fett, aber was soll 29 sein, die Farben fangen soweit ich weiss erst bei 30 an ? Wenn du RGB willst, versuche mal 38;2;R;G;B mit 0-255 jeweils für Rot, Grün und Blau. (48 statt 38 für Hintergrund). Das wird aber im Textterminal nicht evtl. gehen, nur in der grafischen Oberfläche.
https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
habe mehrere Sachen versucht. Es hat leider nicht geklappt. Es wird zwar in der LS_COLORS variable übeenommen aber nicht umgesetzt. Bei Verzeichnissen aber schon irgendwie
“:” am Ende vergessen?
funktioniert bei mir.
Die .dircolors dieht bei mir so aus:
(ganz an Ende habe ich mal RGB getestet, bin erst mit deiner Frage darauf gestoßen, dass das überhaupt geht 🙂 )
Wernn du die Datei änderst und testen willst, benutze
Wenn du die einfach aufrufst wird die in einer Subshell gestartet, die dann direkt wieder beendet wird, das hilft dir nicht.
Achso. Jetzt verstehe ich. Vielen vielen Dank
Nein. Jede Datei hat Dateirechte, die bekommst du beim “ls -l” vorne angezeigt, sowas wie “rwxr-xr-x”. Die bestimmen, ob der Benutzer (erste 3er Gruppe), die Gruppe (2. 3er) und alle anderen die Datei lesen (r), schreiben (w) oder ausführen (x) dürfen. Im Beispiel darf der Benutzer alles, Gruppe und Andere nur lesen + ausführen (- kommt, wenn das Recht nicht gesetzt ist). Mit chmod kann man die Rechte ändern, chmod a-x datei.sh entfernt das Ausführen-Recht für alle.
Wenn dieses x gesetzt ist, dird das im dircolors als EXEC interpretiert. Und gleichzeitig kannst du es eben direkt aufrufen. Ist das Recht nicht gesetzt, wird dircolors das Anhand der Endung einfärben. Aber dann kannst du die Datei auch nicht mehr direkt starten, sondern musst den passenden Interpreter starten, der dann die Datei liest, also “bash datei.sh”.
Das man die Shellscripte .sh nennt ist nur guter Stil, dem System ist die Endung vollkommen egal und es geht auch komplett ohne. Scripte, die ausführbar sind, müssen in der ersten Zeile immer mit “#!/biin/bash” etc. den Namen des Interpreters stehen haben, damit diese direkt ausgeführt werden können, Linux macht das nicht über die Dateiendung.
ahhh.
Also wenn ich die mit Bash datei.sh aufrufe dann ist das ein .sh datei für Linux und wenn ich sie per ./Datei aufrufe dann ist das ein unter EXEC im dircolors. zu finden ?!
Weil Sie ausführbar (Dateiattribut) sind. chmod -x datei.sh entfernt es, dann musst du die Dateien aber immer mit bash datei.sh aufrufen und kannst die nicht mehr per ./datei.sh starten.
Alles gut. Es hat endlich geklappt. habe einfach das Befehl: “file” benutzt um herauszufinden wie das System diese Datei interpritiert. Und es kam “executable” raus. also habe ich “EXEC” geändert und es hat geklappt. Also wie du gesagt hast aber ich war verwirrt weil ich dieses Datentyp mit was anderes verwechselt habe. Die Frage ist jetzt warum das System die Dateien nicht als “.sh” interpritiert aber als EXEC ?
Was tun dann ?
…evtl. nimmt der da aber dann einen defaultwert
EXEC war aber auch auskommentiert
.sh könnte ein Problem sein, weil Shell–Scripte meist das Executable-Bit gesetzt haben, nimmt der da evtl. wohl EXEC nur wie in dem Kommentar das .sh nur, wenn das x-Bit nicht gesetzt ist…
was bei mir im dircolors alles ist ? hier:
.sh 01;32 war übringens auskommentiert
Gehen denn ANSI Codes überhaupt oder hat das Terminal damit ein Problem? Probiere mal mit echo:
Schreibe halt mal deine .dircolors…
habe ich doch.
Wenn du keine keine Datei namens *.test hat das ls nichts zum ausgeben. Ersetze halt *.test mit *.sh in der ersten Zeile, oder mache mit “touch x.test” vorher eine passende Datei.
ich gebe die ersten drei Befehle in den Terminal aber passiert nichts. Wird auch übernommen von der LS_COLORS
Dir ist kein Terminal Befehl.
dir ist ein Dos Befehl.
Und unter Windoof zeigt der dir den Inhalt der Ebene an wo du gerade bist.
Im Linux ist der Befehl dem dir unter Dos gleich ist ls
Wobei ls für LIST steht.
Wer sagr dass Dir ein Befehl ist ?