Warum ist die Farbe von .sh Dateien immernoch grün obwohl es umgestellt habe?

4 Antworten

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  07.07.2024, 04:40

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.

1

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:
Bild zum Beitrag

 - (Informatik, IT, Linux)

Arielle48 
Beitragsersteller
 07.07.2024, 13:15

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

0

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

Woher ich das weiß:Studium / Ausbildung – Informatiker

Arielle48 
Beitragsersteller
 07.07.2024, 12:55

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

0
iQa1x  07.07.2024, 13:15
@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.

1
Arielle48 
Beitragsersteller
 07.07.2024, 13:19
@iQa1x

ich gebe die ersten drei Befehle in den Terminal aber passiert nichts. Wird auch übernommen von der LS_COLORS

0
iQa1x  07.07.2024, 13:31
@Arielle48

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.

1
iQa1x  07.07.2024, 14:20
@Arielle48

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

1
Arielle48 
Beitragsersteller
 07.07.2024, 16:02
@iQa1x

was bei mir im dircolors alles ist ? hier:

.sh 01;32 war übringens auskommentiert

# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# Copying and distribution of this file, with or without modification,
# are permitted provided the copyright notice and this notice are preserved.
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.
# Below are TERM entries, which can be a glob patterns, to match
# against the TERM environment variable to determine if it is colorizable.
TERM Eterm
TERM ansi
TERM *color*
TERM con[0-9]*x[0-9]*
TERM cons25
TERM console
TERM cygwin
TERM dtterm
TERM gnome
TERM hurd
TERM jfbterm
TERM konsole
TERM kterm
TERM linux
TERM linux-c
TERM mlterm
TERM putty
TERM rxvt*
TERM screen*
TERM st
TERM terminator
TERM tmux*
TERM vt100
TERM xterm*
# Below are the color init strings for the basic file types.
# One can use codes for 256 or more colors supported by modern terminals.
# The default color codes use the capabilities of an 8 color terminal
# with some additional attributes as per the following codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
#di=01;33;44
#if [ -f ~/.dircolors ]; then
# . ~/dircolors
# alias ls='ls --color=auto'
#fi
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
#NORMAL 00 # no color code at all
#FILE 00 # regular file: use no color at all
RESET 0 # reset to "normal" color
DIR 01;29 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)
MULTIHARDLINK 00 # regular file with more than one link
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
MISSING 00 # ... and the files they point to
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
CAPABILITY 30;41 # file with capability
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
EXEC 01;32
# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 01;32 # executables (bright green)
#.exe 01;30
#.com 01;32
#.btm 01;32
#.bat 01;32
# Or if you want to colorize scripts even if they do not have the
# executable bit actually set.
.sh 01;32
#.csh 01;32
 # archives or compressed (bright red)
.tar 01;31
.tgz 01;31
.arc 01;31
.arj 01;31
.taz 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
.zip 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
# image formats
.jpg 01;35
.jpeg 01;35
.mjpg 01;35
.mjpeg 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
.tif 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
.mpeg 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
# https://wiki.xiph.org/MIME_Types_and_File_Extensions
.ogv 01;35
.ogx 01;35
# audio formats
.aac 00;36
.au 00;36
.flac 00;36
.m4a 00;36
.mid 00;36
.midi 00;36
.mka 00;36
.mp3 00;36
.mpc 00;36
.ogg 00;36
.ra 00;36
.wav 00;36
# https://wiki.xiph.org/MIME_Types_and_File_Extensions
.oga 00;36
.opus 00;36
.spx 00;36
.xspf 00;36
0
iQa1x  07.07.2024, 20:54
@Arielle48

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

1
Arielle48 
Beitragsersteller
 07.07.2024, 21:36
@iQa1x

EXEC war aber auch auskommentiert

0
iQa1x  08.07.2024, 10:12
@Arielle48

...evtl. nimmt der da aber dann einen defaultwert

1
Arielle48 
Beitragsersteller
 08.07.2024, 15:42
@iQa1x

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 ?

0
iQa1x  08.07.2024, 18:44
@Arielle48

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.

1
Arielle48 
Beitragsersteller
 08.07.2024, 19:45
@iQa1x

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 ?!

0
iQa1x  08.07.2024, 20:07
@Arielle48

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.

1
Arielle48 
Beitragsersteller
 08.07.2024, 20:43
@iQa1x

Achso. Jetzt verstehe ich. Vielen vielen Dank

0

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.

Bild zum Beitrag

 - (Informatik, IT, Linux)

Arielle48 
Beitragsersteller
 07.07.2024, 12:37

Wer sagr dass Dir ein Befehl ist ?

0