Betalningsmetoder Abuse

Linux-terminalens färger

26.09.2021, 22:47

Fördelen med Linux är att man kan anpassa vad som helst om man vill. Detta är fördelen med projektiva system jämfört med procedurella system. Det är en slags konstruktör som består av enskilda block, som vart och ett kan anpassas efter behag.

Det är särskilt intressant om man inte bara kopierar färdiga lösningar, utan försöker förstå vad och hur det fungerar. Och även när man löser en oseriös uppgift lär man sig något nytt.

Färglägga färgerna på utdata

Du vill till exempel justera färgerna i Linux-terminalen i utdata från kommandot ls.

Av ls-dokumentationen kan man förstå att inställningen av färgerna för utdata görs med hjälp av verktyget dircolors, som antingen ställer in färgparametrarna från sin egen databas eller hämtar dem från filen ~/.dircolors. Det nämndes också att initieringen av färganvändningen görs via ~/.bashrc, shell-inställningsfilen, och att parametrarna i sig definieras via variabeln LC_COLORS.

Följande skript hittades i .bashrc:

Det går ut på att kontrollera om verktyget dircolors finns i systemet, tilldela variabeln ett värde och, om det lyckas, använda parametern --color=auto varje gång ls anropas.

Om du kör verktyget dircolors, matar det ut värdet för variabeln LC_COLOR.

Det är också möjligt att mata ut värdet på variabeln LC_COLORS i strukturerad form genom att ange nyckeln:

$ dircolors -p

Eftersom utmatningen är lång, kommer jag inte att ge den här.

Om du omdirigerar utdata dircolors -p > ~/.dircolors, skapas en strukturerad fil från vilken färginställningarna hämtas. Genom att redigera den här filen och ställa in färginställningarna för ls-utmatningen.

I den skapade .dircolors-filen finns en ledtråd:

Ställ in sekvensen med semikolon och få den färg vi behöver i linuxkonsolen, enligt listan. Linux-terminalens färger är från 30 till 37 för teckensnittsfärg och från 40 till 47 för bakgrund. Till exempel

DIR 01;34 innebär att katalognamn kommer att vara feta och blå.

Men på det här sättet får du bara åtta färger, och moderna terminalemulatorer kan visa minst 256 färger.

Det finns andra sätt att ställa in färgen. Exempelvis ger EXEC 38;5;208;1 orange tjock font för körbara filer.

För att du inte ska behöva gå igenom Linux-färgerna manuellt finns det en färdig färgtabell

Genom att byta ut färgvärdet 38;5;x - där x är färgen från tabellen, får vi det nödvändiga resultatet. Du får något i stil med detta:

Hur fungerar det? Poängen är att inställningen av färgen på den information som matas ut i terminalemulatorn görs med hjälp av ANSI escape-koder. Detta är en viss sekvens av tecken som inte skrivs ut på skärmen, men som påverkar utmatningen. Den kallas så eftersom den börjar med [ - koden "Esc". Eftersom det finns många olika terminaler och terminalemulatorer är dessa kontrollkoder standardiserade. Färgstyrning genom sekvensen från 30 till 37 är ECMA-48-standarden. Information om detta finns i avsnittet console_codes.

Färglägga inbjudningsraden

När du väl har förstått hur du ställer in Linux-färger via esc-koder är det enkelt att omforma och färgsätta prompten. Variabeln PS1, som definieras i filen ~/.bashrc, är ansvarig för dess utdata

I Linux Mint ser skriptet för att initiera den ut så här:

Det vill säga att det först avgörs om skriptet kördes av root eller en vanlig användare. Eftersom det i de allra flesta fall är det andra alternativet, bör raden efter det första "else" redigeras. Radens format dechiffreras i bash-dokumentationen, i avsnittet "Promting". Det innebär att esc-sekvensen ska börja med "[" och sluta med "]". På detta sätt:

  • [[01;32m] - ställer in färgen grön;
  • u - matar ut användarnamnet;
  • h - matar ut värdnamnet;
  • [[00m] - rensar de inställda attributen;
  • [[01;34m] - ställer in färgen blå;
  • w - visar namnet på arbetskatalogen;
  • Hej - ett exempel på att vilken härledd text som helst kan matas ut.

Vad mer kan skrivas ut i prompten:

  • d - datum, i formatet "Wed Dec 28";
  • A - tid, i 24-timmarsformat;
  • ! - numret på det aktuella kommandot i historiken;
  • - överföring av utdata till en annan rad;

Låt oss introducera något mer intressant:

PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '

Och promptraden kommer att se ut som: