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 ?

(2 votes)
Loading...

Similar Posts

Subscribe
Notify of
23 Answers
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Jericho119
8 months ago

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.

Jericho119
8 months ago
Reply to  Jericho119

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.

JanaL161
8 months ago

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:

iQa1x
8 months ago

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

iQa1x
8 months ago
Reply to  Arielle48

“:” am Ende vergessen?

$ LS_COLORS='*.test=30;41:'
$ export LS_COLORS
$ ls *.test

funktioniert bei mir.

Die .dircolors dieht bei mir so aus:

LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:s
u=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.t
az=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zi
p=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31
:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.
ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab
=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mj
peg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.ti
f=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mp
eg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.
vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli
=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;
35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;3
6:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#
=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.o
ld=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tm
p=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:*.test=00;38;2;255;32;32;48;2;255;255;192:';
export LS_COLORS

(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

source .dircolors

Wenn du die einfach aufrufst wird die in einer Subshell gestartet, die dann direkt wieder beendet wird, das hilft dir nicht.

iQa1x
8 months ago

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.

iQa1x
8 months ago

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.

iQa1x
8 months ago

…evtl. nimmt der da aber dann einen defaultwert

iQa1x
8 months ago

.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…

iQa1x
8 months ago

Gehen denn ANSI Codes überhaupt oder hat das Terminal damit ein Problem? Probiere mal mit echo:

echo -e '\033[31;47mTest\033[40m'

Schreibe halt mal deine .dircolors…

iQa1x
8 months ago

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.

Flips100
8 months ago

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.