කැමති Bash shebang යනු කුමක්ද?


1149

කිසියම් Bashබොහෝ භාවිතයන් සඳහා වෛෂයික වඩා හොඳ අනිත් අයට වඩා shebang?

  • #!/usr/bin/env bash
  • #!/bin/bash
  • #!/bin/sh
  • #!/bin/sh -
  • යනාදිය

බොහෝ කලකට පෙර මට නොපැහැදිලි ලෙස සිහිපත් වන්නේ අවසානයට ඉරක් එක් කිරීමෙන් ඔබේ පිටපතට යමෙකු විධානයක් යැවීම වළක්වන නමුත් ඒ පිළිබඳ කිසිදු තොරතුරක් සොයාගත නොහැකි බවයි.


4
සහ එය /usr/local/bin/bashOpenBSD මත.
jww

Answers:


1554

ඔබ භාවිතා කළ යුතු #!/usr/bin/env bashසඳහා පහසුවෙන් එහාමෙහා ගෙන යාමේ : විවිධ * nixes දමා bashවිවිධ ස්ථාන, සහ භාවිතා /usr/bin/envපළමු ක්රියාත්මක කිරීමට සලසන වක් මගක් bashමත සොයා ගත් PATH. සහ shඑසේ නොවේbash .


9
ස්තූතියි. Adding! පෙනෙන විදිහට එය ප්‍රයෝජනවත් වන්නේ විධාන පුවරුවේ අනිෂ්ට තර්ක විධාන පුවරුවේ සම්ප්‍රේෂණය වීම වැළැක්වීම සඳහා පමණි /bin/sh.
කුර්ටෝසිස්

13
Ay රේ සියලු පද්ධති වල bashජීවත් නොවේ /bin.
ptierno

13
මට සමානවම, මම එය අන්වර්ථයකට එකතු කළෙමි alias shebang='echo "#!/usr/bin/env bash"':, දැන් මට මෙතැනට යාම වෙනුවට පර්යන්තය විවෘත කර ෂෙබාං ටයිප් කළ යුතුය.
ඔයිලෙක්ස්

19
මෙම පිළිතුර රැවටිලිකාර ය. POSIX කියන්නේ නැහැ ඒ envපවතී/usr/bin/env . එය /bin/envමාවතේ පවතින තාක් කල් හෝ ඕනෑම තැනක විය හැකිය . එය විය හැකි /dummy/envනම්, /dummyවේ PATH. පොසික්ස් යටතේ ෂෙබාං නිර්වචනය කර නැත, එබැවින් මට #!stop toasterUSB කෝපි යන්ත්‍රය ආරම්භ කර POSIX අනුකූල විය හැකිය. එබැවින් #!/usr/bin/env bashවඩා හොඳ නොවේ #!/bin/bash, එය අනුව අතේ ගෙන යා හැකි අඩු විය හැකිය.
darkfeline

21
ark ඩාර්ක්ෆලයින් අතේ ගෙන යා හැකි බව නිරපේක්ෂ නොවේ - සෑම වේදිකාවකම එකම දේ කරන ඕනෑම පිටපතක් සෑදීම ගණිතමය වශයෙන් කළ නොහැකිය. 2012 සිට 2018 දක්වා/usr/bin/env දක්වා /bin/bashxor ට වඩා වැඩි යන්ත්‍ර ගණනාවක පවතී /usr/bin/bash, එබැවින් මෙම රේඛාවෙන් ආරම්භ වන ස්ක්‍රිප්ටයක් හැකි තරම් යන්ත්‍ර මත අපේක්ෂිත දේ කරනු ඇත.
l0b0

80

/bin/shසාමාන්‍යයෙන් පද්ධතියේ පෙරනිමි කවචයට සබැඳියක් වන අතර එය බොහෝ විට bashනමුත් ක්‍රියාත්මක වේ. උදා: ඩේබියන් පද්ධති යනු සැහැල්ලු බරයි dash. කෙසේ හෝ මුල් බෝර්න් කවචය වේ sh, එබැවින් ඔබේ ස්ක්‍රිප්ට් සමහර bash(2 වන පරම්පරාව, "බෝර්න් අග්න් ෂ") විශේෂිත ලක්ෂණ ( [[ ]]පරීක්ෂණ, අරා, විවිධ සීනි දේවල් ආදිය) භාවිතා කරන්නේ නම්, ඔබ වඩාත් නිශ්චිත විය යුතු අතර පසුව භාවිතා කරන්න . මේ ආකාරයෙන්, bash ස්ථාපනය කර නොමැති පද්ධති වල, ඔබගේ ස්ක්‍රිප්ට් ක්‍රියාත්මක නොවේ. මෙම පරිණාමය පිළිබඳ චිත්රපටවල ආකර්ෂණීය ත්‍රෛභාෂාවක් තිබිය හැකි බව මට වැටහේ ... නමුත් එය අසන්නට පුළුවන.

ද ලෙස ජනිත කලේය විට බව කරුණාවෙන් sh, bashයම් දුරකට POSIX සම්මත ලෙස හැසිරෙනු sh (ද බලන්න යනු GNU ලේඛන මේ ගැන).


2
පොදු වසම් කෝර්න් ෂෙල් (pdksh) OpenBSD හි පෙරනිමිය.
jww

බොහෝ පද්ධති ඇත නොහැකි ලින්ක් /bin/shඕනෑම තැනකට /usrබව ලෙස පෙර ක්රියාත්මක කිරීමට init පිටපත් සඳහා ඒ වෙනුවට දෘඩ ඇතැ /usrකියන්නේ සවිකර.
aij

@aij මම "බොහෝ හෝ වැඩි ගණනක්" එහි තැබුවේ ඇයිදැයි මම නොදනිමි - මම ෆෙඩෝරා පරිශීලකයෙක් වන අතර /bin, /sbinවසර ගණනාවක් තිස්සේ පෙරනිමියෙන් සමමුහුර්ත වී ඇති /usr/binඅතර /usr/sbin, සහ , එම සන්දර්භය තුළ /bin/shසබැඳිය bashසහ සත්‍යය නාමාවලිය වේ /usr/bin. නමුත් මම ඉහත කරුණු නිවැරදි කරමි.
CodeClown42

51

භාවිතා කිරීමට මම නිර්දේශ කරමි:

#!/bin/bash

එය 100% අතේ ගෙන යා හැකි නොවේ (සමහර පද්ධති bashහැර වෙනත් ස්ථානයක ස්ථානගත වේ/bin ), නමුත් දැනට පවතින ස්ක්‍රිප්ට් විශාල ප්‍රමාණයක් #!/bin/bashවිවිධ මෙහෙයුම් පද්ධතිවලට පීඩනය යෙදීමෙන් /bin/bashඅවම වශයෙන් ප්‍රධාන ස්ථානයට සමමුහුර්ත කිරීමක් සිදු කරයි.

විකල්පය:

#!/usr/bin/env bash

යෝජනා කර ඇත - නමුත් envවිධානය ක්‍රියාත්මක වන බවට සහතිකයක් නොමැත/usr/bin (තවද මම එය නොමැති පද්ධති භාවිතා කර ඇත). තවද, මෙම පෝරමය bashවර්තමාන පරිශීලකයින්ගේ පළමු අවස්ථාව භාවිතා කරනු ඇත $PATH, එය බාෂ් කවචයේ සුදුසු අනුවාදයක් නොවිය හැකිය.

(නමුත් /usr/bin/envඕනෑම සාධාරණ නවීන ක්‍රමයක් මත ක්‍රියා කළ යුතුයenv/usr/binපද්ධතිය එය වැඩ කිරීමට යම් දෙයක් කරන නිසා ද, නැත්නම්. මම ඉහත සඳහන් පද්ධතිය SunOS 4, මම බොහෝ විට වසර 25 ක් පමණ භාවිතා කර නොමැති විය.)

නැති පද්ධතියක් මත ධාවනය කිරීමට ඔබට ස්ක්‍රිප්ටයක් අවශ්‍ය නම් /bin/bash , නිවැරදි ස්ථානයට යොමු කිරීම සඳහා ඔබට ස්ක්‍රිප්ට් වෙනස් කළ හැකිය (එය අපහසු බව පිළිගත යුතුය).

මම වඩාත් ගැඹුරින් දී එබැව්න් ගවේෂණශීලි සාකච්ඡා කළා මගේ පිළිතුර කිරීමට මෙම ප්රශ්නය .

තරමක් අප්රකට යාවත්කාලීන: එක් පද්ධතිය මම භාවිතය, Termux , ඩෙස්ක්ටොප්-ලිනක්ස් වැනි ස්ථරය ඇන්ඩ්රොයිඩ් යටතේ ලකුණු, නැති බව /bin/bash( bashවේ /data/data/com.termux/files/usr/bin/bash) - නමුත් එය සහාය විශේෂ මෙහෙයුම් ඇත #!/bin/bash.


3
අවුරුදු 2 කට පසුවත් මෙය තවමත් මෙහි ඇති හොඳම උපදෙස් වේ. සරල විසඳුම ක්‍රියාත්මක නොවන්නේ නම්, ඔබ කලින් ගත් තීරණ ගැන ප්‍රශ්න කළ යුතුය. පිළිගත් හා වඩාත්ම උත්තරීතර පිළිතුර වැරදියි, එය නිවැරදි නොවේ :)
මෘදුකාංග ඉංජිනේරු

27

සුදුසු පරිවර්තකය කැඳවීමට ෂෙබාං රේඛාවක් භාවිතා කිරීම BASH සඳහා පමණක් නොවේ. ඔබේ පද්ධතියේ පර්ල්, පයිතන්, පීඑච්පී (සීඑල්අයි) සහ තවත් බොහෝ භාෂාවන් සඳහා ඔබට ෂෙබාං භාවිතා කළ හැකිය. මාර්ගය වන විට, ෂෙබාං

#!/bin/sh -

(එය ඉරක් දෙකක් ද විය හැකිය, එනම් -- ) බාෂ් විකල්ප අවසන් කිරීමෙන් පසුව සියල්ල ගොනු නාම සහ තර්ක ලෙස සලකනු ලැබේ.

envවිධානය භාවිතා කිරීමෙන් ඔබේ ස්ක්‍රිප්ට් අතේ ගෙන යා හැකි අතර ඔබේ ස්ක්‍රිප්ට් සඳහා අභිරුචි පරිසරයන් සැකසීමට ඔබට ඉඩ සලසයි. එබැවින් අතේ ගෙන යා හැකි ස්ක්‍රිප්ට් භාවිතා කළ යුතුය

#!/usr/bin/env bash

නැතහොත් පර්ල් වැනි ඕනෑම භාෂාවක් සඳහා

#!/usr/bin/env perl

මේ manසඳහා පිටු බැලීමට වග බලා ගන්න bash:

man bash

සහ env:

man env

සටහන: උබුන්ටු වැනි ඩේබියන් සහ ඩේබියන් මත පදනම් වූ පද්ධති shසම්බන්ධ dashනොවේ bash. සියලුම පද්ධති ස්ක්‍රිප්ට් භාවිතා කරන පරිදි sh. ඩෙබියන් පවසන පරිදි මෙමඟින් බාෂ් වර්ධනය වීමට සහ පද්ධතිය ස්ථාවරව සිටීමට ඉඩ සලසයි.

වින්ඩෝස් හි ඔබට හැකි තාක් දුරට ක්‍රියාත්මක කළ හැකි දේ මත ආයාචනා කිරීමේ දිගුව මඟ හැරිය නොහැකි බැවින්, ෂෙබාං ආයාචිත ස්ක්‍රිප්ට් මත මම කිසි විටෙකත් ගොනු දිගු භාවිතා නොකරන්නාක් මෙන් ආයාචනා * නික්ස් තබා ගන්න. ගොනු විධානයට එය ස්ක්‍රිප්ටයක් ලෙස හඳුනාගත හැකිය.


4

එය සැබවින්ම රඳා පවතින්නේ ඔබ ඔබේ පිටපත් ලියන ආකාරය මත ය. ඔබ /bin/shbash වෙත සමමුහුර්ත කර ඇත්නම් , bash ලෙස ආයාචනා කළ විට sh, සමහර විශේෂාංග නොමැත .

ඔබට විශේෂිත, පොසික්ස් නොවන විශේෂාංග අවශ්‍ය නම් භාවිතා කරන්න #!/bin/bash


3
OpenBSD හි Bash ස්ථාපනය කර නොමැත. ඔබ එය හරහා ස්ථාපනය කරන්නේ නම් pkg_add, එය පිහිටා ඇති අතර /usr/local/binඑය මාර්ගයේ නොවිය හැකිය.
jww

POSIXවිශේෂාංගයක් ගැන කුමක් කිව හැකිද?
නිකොලාන් අසාද්
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.