මම භාවිතා කරන්නේ කුමන කවචයදැයි පරීක්ෂා කරන්නේ කෙසේද?


442

ටර්මිනලය ෂෙල් එක හැර අන් කිසිවක් නොවන බව මම කියවූ අතර යුනික්ස් විවිධ ෂෙල් වෙඩි සපයයි:

  • බෝර්න් ෂෙල් (ෂ)
  • සී කවචය (csh)
  • TC shell (tcsh)
  • කෝර්න් ෂෙල් (ksh)
  • Bourne Again shell (bash)

ප්රශ්නය:

  • මම ටර්මිනල් කවුළුවක් විවෘත කරන විට, පෙරනිමියෙන් විවෘත කරන්නේ කුමන කවචයද?
  • ෂෙල් වෙඩි කීයක් ස්ථාපනය කර ඇත්දැයි පරීක්ෂා කරන්නේ කෙසේද?
  • මගේ ගිණුමෙන් භාවිතා කරන කවචය වෙනස් කරන්නේ කෙසේද?


@KasiyA ද මෙය සම්බන්ධ වේ askubuntu.com/questions/87853/...
ඩේසි

ටර්මිනලය ෂෙල් එකට අතුරුමුහුණතක් බව කරුණාවෙන් සලකන්න (එක් අවස්ථාවකදී එය ඇත්ත වශයෙන්ම භෞතික අතුරුමුහුණතක් විය), සහ කවචය පර්යන්තය නොවේ - එය විධාන පරිවර්තකයෙකි. Askubuntu.com/a/640105/295286
සර්ජි කොලොඩියාස්නි

Answers:


524

ඔබ භාවිතා කරන්නේ කුමන කවචය දැයි බැලීමට ඔබට පහත විධානය ඔබේ පර්යන්තයේ ටයිප් කළ හැකිය:

echo $0

ඔබ bash ( Bourne Again Shell ) පර්යන්තය භාවිතා කරන්නේ නම් ප්‍රති result ලය පහත දැක්වෙන දේට සමාන වනු ඇත :

-bash

5
වන 0පරිසරයක් විචල්ය?
Mi_Onim

51
@Mi_Onim $ 0 යනු ක්‍රියාත්මක වන ක්‍රියාවලියේ නමයි. ඔබ එය කවචයක් ඇතුළත භාවිතා කරන්නේ නම් එය කවචයේ නම නැවත ලබා දෙනු ඇත. ඔබ එය ස්ක්‍රිප්ටයක් තුළ භාවිතා කරන්නේ නම්, එය ස්ක්‍රිප්ටයේ නම වනු ඇත.
කිංමිලෝ

2
සටහන : මෙය අන්තර්ක්‍රියාකාරී සඳහා ක්‍රියා නොකරනු ඇත csh. % echo $0 No file for $0., නමුත් එය ක්‍රියාත්මක වේtcsh
සර්ජි කොලොඩියාෂ්නි

3
එකක් සිම්ලින්ක් නම් වැඩ කරන්නේ නැත. වැනි bashලෙසsh
අන්වර්

11
N ඔබ ෂෙල් නාමය ලබාගත් echo $0පසු ls -l `which <name>` එය වෙනත් ෂෙල් ද්විමය සමඟ සමපාත වී ඇත්දැයි බැලීමට අන්වර් හොඳ අදහසක් ඉදිරිපත් කරයි .
ජීවන් අමරා

142

සුපුරුදු පරිසරය තුළ ඔබ සතුව ඇති කවචය සොයා ගැනීමට ඔබට SHELLපරිසර විචල්‍යයේ වටිනාකම පරීක්ෂා කළ හැකිය :

echo $SHELL

වත්මන් ෂෙල් උදාහරණය සොයා ගැනීමට, වත්මන් කවචයේ PID ඇති ක්‍රියාවලිය (කවචය) සොයා බලන්න.

වර්තමාන කවචයේ PID සොයා ගැනීමට:

echo "$$"

දැන් PID ඇති ක්‍රියාවලිය සොයා ගැනීමට:

ps -p <PID>

එය එකට තැබීම:

ps -p "$$"

33
EL SHELL යනු පද්ධතියේ (හෝ පරිශීලකයාගේ) පෙරනිමි කවචය වන අතර එය සාමාන්‍යයෙන් ඕනෑම මොහොතක සත්‍ය වශයෙන්ම භාවිතා වන කවචය වේ.
කිංමිලෝ

1
@kingmilo: ඔබ හරි, පිළිතුර වෙනස් කර ඇත.
heemayl

3
echo $SHELLමට දුන් /bin/cshසහ ps -p $$මට දුන් 22673 pts/1 00:00:00 bash. ඔවුන් සමාන නොවන්නේ මන්දැයි කිංමිලෝ (ඉහළ) පැහැදිලි කළේය.
18446744073709551615

1
Gnu & bsd ps අනුවාද අතර අතේ ගෙන යා හැකි ආකාරයකින් වත්මන් කවචයේ ෂෙල් නාමය පමණක් ලබා ගැනීමට මෙය හොඳින් ක්‍රියාත්මක වේ:ps -cp "$$" -o command=""
ජේම්ස් ටොමසිනෝ

1
ස්තූතියි @ හොඳම දේ කළ ජේම්ස් ටොමසිනෝ!
රොබට් හෝටන්

30

$SHELLඔබට සුපුරුදු කවචය ලබා දෙයි. $0වත්මන් කවචය ඔබට ලබා දෙයි.

උදාහරණයක් ලෙස: මගේ ටර්මිනල් ඇප් සඳහා භාවිතා කරන මගේ පෙරනිමි කවචය ලෙස මා සතුව ඇත. නමුත් මගේ iTerm2 යෙදුම සඳහා, කවුළුව විවෘත වන විට මම විධානය භාවිතා කරමි : /bin/ksh.

ඉතින් මගේ iTerm2 එකෙන් $0මට /bin/kshලැබෙනවා. iTerm2 හි $SHELLමට ලබා දෙයි /bin/bash. $0, $SHELLමට /bin/bashටර්මිනල් එකේ දෙනවා


2
මෙය ඉහළින්ම ඡන්දය දුන් අනෙක් පිළිතුරු වල අපකීර්තියකි. ඔබට ස්තුතියි.
මයිකල් හොෆ්මන්

මට නම්, මම zsh ස්ථාපනය කර ඇති අතර එය වත්මන් පෙරනිමිය වන අතර එය bash ලෙස වෙනස් කිරීම සඳහා කළ යුතු සියල්ලම bashටර්මිනලයේ ටයිප් කරන්න . Zsh වෙත ආපසු යාමට, ටයිප් කරන්නzsh
යූසුෆ් අසාද්

12

අනෙක් පිළිතුරු ෂෙල් විශේෂිත අංග භාවිතා කිරීමට නැඹුරු වන නමුත් අපි භාවිතා කරන්නේ කුමන කවචයදැයි සොයා ගැනීමට අපි උත්සාහ කරන්නෙමු, එබැවින් ඔවුන් ගැටලුවට පිළිතුර උපකල්පනය කරයි. උදාහරණයක් ලෙස මාළු සඳහා පිළිතුරු කිසිවක් ක්‍රියා නොකරනු ඇත.

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

ඒ වෙනුවට sh හි වාක්‍ය ඛණ්ඩය භාවිතා කරන්න, නමුත් අපි සොයන්නේ PPID නොව PID ය. Cmd සොයා ගැනීමට PPID භාවිතා කරන්න.

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

වැඩිදියුණු කිරීමට ස්තූතියි @ මුරු


2
ඔබ ශීර්ෂයන් අතහැර දැමීමට ppid=/ භාවිතා කිරීමට භාවිතා කරයි , සහ ක්‍රියාත්මක වන්නේ කුමන ගොනුවක් දැයි බැලීමට සලකා බලන්න ( ප්‍රතිදානය ෂෙල් එක ධාවනය වන ඕනෑම දෙයකින් හැසිරවිය හැකි බැවින්). cmd=tail -1/proc/.../execmd
මුරු

1
පෙනෙන ආකාරයට මෙය කාර්යබහුල පෙට්ටියේ ක්‍රියා නොකරයි, පොසික්ස් නොවන අනුකූලතාවය හේතුවෙන්: ref: github.com/broadinstitute/cromwell/pull/…
ඉවාන් බෙන්

ඔබගේ පළමු කේත වාරණය නිදර්ශනය කරන්නේ කුමක්ද?
ඇන්ඩ්‍රියාස්

8

ඔබගේ පරිශීලකයාගේ පෙරනිමි කවචය කුමක්දැයි දැන ගැනීමට, ඔබට ධාවනය කළ හැකිය:

echo "$SHELL"

උදාහරණයක් ලෙස ඔබ Bash භාවිතා කරන්නේ නම් ඔබට පහත ප්‍රතිදානය ලබා ගත යුතුය:

/bin/bash

ඔබ කිසිදු වින්‍යාසයක් වෙනස් නොකළේ නම් එය බාෂ් විය යුතු බැවින් එය උබුන්ටු හි පෙරනිමි කවචය වේ.


/ bin / sh යනු ෂෙල් විධාන භාෂාව මිස බෝර්න් ෂෙල් නොවේ, කරුණාකර ඔබේ පිළිතුර සංස්කරණය කරන්න.
කිංමිලෝ

/bin/shමගේ පිළිතුරෙහි කිසිදු සඳහනක් නොමැත
කොස්

olkol සංස්කරණය කිරීමට පෙර එහි සිටියේය. $ ෂෙල් යනු පද්ධතියේ (හෝ පරිශීලකයාගේ) පෙරනිමි කවචය වන අතර එය සාමාන්‍යයෙන් (නමුත් අවශ්‍ය නොවේ) ඕනෑම මොහොතක සත්‍ය වශයෙන්ම භාවිතා වන කවචයයි.
කිංමිලෝ

1
@kingmilo පිළිතුර නැවත කියවීමෙන් මම සිතන්නේ ඔබේ සැලකිල්ල කුමක්දැයි මට වැටහී ඇති බවයි. මගේ පිළිතුරෙහි "දැනට" යන්නෙහි තේරුම මම පැහැදිලි කළෙමි
කොස්

2
redfrederickjh මාළු ටිකක් අමුතුයි. මෙම $$විචල්ය ඇත්තටම වේ POSIX විසින් අර්ථ ෂෙල් වෙඩි අතිමහත් බහුතරය මත වැඩ කරනු ඇත. මාළු මෙහි ප්‍රමිතිය අනුගමනය නොකිරීමට තීරණය කර ඇති බැවින් එය නොසලකා හැරීම සාධාරණ යැයි මම සිතමි. $$Sh, dash, bash, zsh, ksh, අළු, tcsh සහ csh වලින් බලාපොරොත්තු වන පරිදි ක්‍රියා කරන බව මට තහවුරු කළ හැකිය. ඇත්ත වශයෙන්ම, මගේ හිසට ඉහළින් මාළු වැඩ නොකරන වෙනත් කවචයක් ගැන මට සිතිය නොහැකිය.
terdon

6

මුල් පෝස්ට් එකෙන් ප්‍රශ්න තුනක් ඇහුවා. ලබා දී ඇති පිළිතුරු පළමු ප්‍රශ්නය ආවරණය කරයි, "මම ටර්මිනල් කවුළුවක් විවෘත කරන විට, පෙරනිමියෙන් විවෘත කරන්නේ කුමන කවචයද?" "ටර්මිනලය තුළ දැනට ක්‍රියාත්මක වන කවචය සොයා ගන්නේ කෙසේද?" යනුවෙන් අසන ලද ප්‍රශ්නයකටද ඔවුහු පිළිතුරු දෙති. කෙසේ වෙතත්, මට පෙනෙන පරිදි, කිසිවෙකු මුලින් ඇසූ දෙවන හෝ තෙවන ප්‍රශ්නවලට පිළිතුරු දී නැත, එනම් "ෂෙල් වෙඩි කීයක් සවි කර ඇත්දැයි පරීක්ෂා කරන්නේ කෙසේද?" සහ "මගේ ගිණුමෙන් භාවිතා කරන කවචය වෙනස් කරන්නේ කෙසේද?"

  • පිළිතුරු දීමට "ෂෙල් වෙඩි කීයක් ස්ථාපනය කර ඇත්දැයි පරීක්ෂා කරන්නේ කෙසේද?" පහත දැක්වෙන විධානය මඟින් පවතින සියලුම ෂෙල් වෙඩි ලැයිස්තු ගත කරයි:

    cat /etc/shells
    

    උදාහරණයක් ලෙස, උබුන්ටු 18.10 හි පෙරනිමි ස්ථාපනයකදී මෙය ලබා දෙන්නේ:

    # /etc/shells: valid login shells
    /bin/sh
    /bin/dash 
    /bin/bash
    /bin/rbash
    

    කෙසේ වෙතත්, පෙරනිමියෙන් sh යනු ඉරක් සඳහා සංකේතාත්මක සබැඳියක් වන අතර rbash -r ("සීමිත බැෂ්") විකල්පය සමඟ බැෂ් වෙත සම්බන්ධ කරයි, එබැවින් ඇත්ත වශයෙන්ම ඇත්තේ ෂෙල් වෙඩි දෙකක් පමණි, ඉහත ලැයිස්තුවේ දැක්වෙන පරිදි හතරක් නොවේ. පහත දැක්වෙන විධානය මඟින් ලැයිස්තුගත කර ඇති ෂෙල් වෙඩි කිසිවක් සංකේතාත්මක සම්බන්ධකද යන්න පෙන්වනු ඇත, එසේ නම් ඒවා සම්බන්ධ වන්නේ කොතැනද: ls -l / bin

  • දැන් "මගේ ගිණුමෙන් භාවිතා කරන කවචය වෙනස් කරන්නේ කෙසේද?" මෙයින් උපකල්පනය කරන්නේ "ටර්මිනලයක් භාවිතා කරන පෙරනිමි කවචය ස්ථිරවම වෙනස් කරන්නේ කෙසේද" යන්නයි, මෙහි පිළිතුරක් ඇත .


0

මා සම්බන්ධ කරන එක් සේවාදායකයක, පිවිසුම් කවචය යනු /bin/shසමමුහුර්තකරණයකි/bin/bash

මෙහි බොහෝ පිළිතුරු ලබා දෙනු ඇත sh, මෙම විශ්රාම වැටුප් කරන්න කරන, හැර, එය GNU bash Bourne shell තියෙන්නේ නොව සලකා මේ එක ලබා දෙන බව/bin/bash

මෙම නඩුව සඳහා වැඩ කරන තවත් විකල්පයක් නම්:

$ echo $SHELL
/bin/sh

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 May 31 16:15 /bin/sh -> bash

$ /bin/sh --help
GNU bash, version 4.2.10(1)
Usage:  /bin/sh [GNU long option] [option] ...
        /bin/sh [GNU long option] [option] script-file ...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.