Vraag Hoe controleer ik welke shell ik gebruik?


Ik lees dat de terminal niets anders is dan shell, en Unix biedt verschillende smaken van shells:

  • Bourne shell (sh)
  • C-schaal (csh)
  • TC shell (tcsh)
  • Korn shell (ksh)
  • Bourne Again shell (bash)

vragen:

  • Wanneer ik een terminalvenster open, welke shell wordt standaard geopend?
  • Hoe controleer ik hoeveel shells zijn geïnstalleerd?
  • Hoe verander ik de gebruikte shell van mijn account?

236
2018-02-28 03:58


oorsprong


Hoe bepaal ik de huidige schaal waar ik aan werk? op stackoverflow.com - αғsнιη
@KasiyA Dit heeft ook met betrekking tot askubuntu.com/questions/87853/... - d a i s y


antwoorden:


U kunt de volgende opdracht in uw terminal typen om te zien welke shell u gebruikt:

echo $0

Het resultaat ziet er ongeveer zo uit als hieronder als u de bash (Bourne Again Shell) terminal:

-bash

288
2018-02-28 04:03



is 0 een omgevingsvariabele? - Mi_Onim
@Mi_Onim $ 0 is de naam van het lopende proces. Als je het in een shell gebruikt, retourneert het de naam van de shell. Als u het in een script gebruikt, is dit de naam van het script. - kingmilo
NOTITIE: dit werkt niet voor interactief csh. % echo $0 No file for $0. , maar het werkt voor tcsh - Sergiy Kolodyazhnyy
Werkt niet als het een symlink is. Graag willen bash als sh - Anwar
@Anwar maakt een goed punt, nadat je de shell-naam van krijgt echo $0, ls -l `which <name>`  om te zien of het is gekoppeld aan een andere shell-binaire code. - JivanAmara


Om de shell te vinden die u in de standaardomgeving hebt, kunt u de waarde van de SHELL omgevingsvariabele:

echo $SHELL

Om het huidige shell-exemplaar te vinden, zoekt u naar het proces (shell) met de PID van het huidige shell-exemplaar.

De PID van het huidige exemplaar van de shell vinden:

echo "$$"

Nu om het proces te vinden met de PID:

ps -p <PID>

Het samenstellen:

ps -p "$$"

75
2018-02-28 04:06



$ SHELL is de standaard shell voor het systeem (of de gebruiker), meestal (maar niet noodzakelijkerwijs) de shell die op een bepaald moment daadwerkelijk wordt gebruikt. - kingmilo
@kingmilo: Ja, dat is zo, antwoord gewijzigd. - heemayl
Ik vond dit behoorlijk handig bij het overschakelen naar een gebruiker via 'su - <gebruikersnaam>', bijvoorbeeld voor het instellen van postgres, jenkins, ... - bully
echo $SHELL gaf me /bin/csh en ps -p $$ gaf me 22673 pts/1 00:00:00 bash. Kingmilo legde (hierboven) uit waarom ze niet hetzelfde zijn. - 18446744073709551615
@ 18446744073709551615 Ik heb ook niet gezegd dat ze hetzelfde zijn. Lees het antwoord opnieuw zorgvuldig; merk op standaard en actueel formuleringen. - heemayl


$SHELL geeft je de standaardshell. $0 geeft je de huidige shell.

Bijvoorbeeld: ik heb bash als mijn standaard shell, die ik gebruik voor mijn Terminal-app. Maar voor mijn iTerm2-app gebruik ik de opdracht terwijl het venster wordt geopend: /bin/ksh.

Dus mijn $0 geeft me /bin/ksh op iTerm2. $SHELL geeft me /bin/bash op iTerm2. $0,$SHELL geeft me /bin/bash op Terminal


16
2017-11-18 11:45



Dit is een leuke beschrijving van de andere antwoorden met de hoogste stem. Dank je. - Michael Hoffmann


Om te weten wat de standaard shell voor uw gebruiker is, kunt u het volgende uitvoeren:

echo "$SHELL"

Als je bijvoorbeeld Bash gebruikt, zou je de volgende uitvoer moeten krijgen:

/bin/bash

Als je geen configuratie hebt gewijzigd, zou dit Bash moeten zijn, omdat Bash de standaard shell op Ubuntu is.


5
2018-02-28 04:02



/ bin / sh is de Shell Command Language en niet de Bourne Shell, bewerk alsjeblieft je antwoord. - kingmilo
@kingmilo Er is geen /bin/sh referentie in mijn antwoord - kos
@kol was er vóór de bewerking. Let ook op $ SHELL is de standaard shell voor het systeem (of de gebruiker), meestal (maar niet noodzakelijkerwijs) de shell die op een bepaald moment daadwerkelijk wordt gebruikt. - kingmilo
@kingmilo Let op: de vraag is "wanneer ik terminal open welke shell standaard is geopend ???" en dat het antwoord luidt: "Als je geen configuratie hebt veranderd, zou het moeten zijn Bash, omdat dat de standaard shell op Ubuntu is ", dus het antwoord past bij de vraag - kos
@kingmilo Als ik het antwoord nogmaals lees, denk ik dat ik begrijp wat je bezorgdheid is, waarschijnlijk heb ik mezelf niet goed uitgedrukt. Ik heb de betekenis van "momenteel" in mijn antwoord verduidelijkt - kos


De andere antwoorden hebben de neiging om shell-specifieke functies te gebruiken, maar we proberen te ontdekken welke shell we gebruiken, dus nemen ze het antwoord op het probleem. Geen van de antwoorden zal bijvoorbeeld werken op vis.

sh -c 'ps -p $$ -o ppid=' | xargs ps -o cmd= -p

Gebruik in plaats daarvan de $$ -syntaxis in een aanroep van sh, maar dan zijn we op zoek naar de PPID en niet de PID. Gebruik de PPID om de cmd te vinden.

sh -c 'ps -p $$ -o ppid=' | xargs -i readlink -f /proc/\{\}/exe

Bedankt voor de verbetering @muru


2
2018-04-06 04:00



U kunt gebruiken ppid=/cmd=om de headers weg te laten (en dus de tail -1s), en overweeg om naar te kijken /proc/.../exe om te zien welk bestand wordt uitgevoerd (sinds de cmd uitvoer kan worden gemanipuleerd door wat de shell dan ook heeft). - muru
Blijkbaar werkt dit niet in busybox, vanwege non posix compliance: ref: github.com/broadinstitute/cromwell/pull/... - Evan Benn