Startpagina » hoe » Wanneer is het beter om #! / Bin / bash te gebruiken in plaats van #! / Bin / sh in een shellscript?

    Wanneer is het beter om #! / Bin / bash te gebruiken in plaats van #! / Bin / sh in een shellscript?

    Wanneer u een nieuw shellscript maakt, wilt u er zeker van zijn dat het zo probleemloos mogelijk is, maar soms kan het een beetje verwarrend zijn om te weten welke shebang de beste is die u kunt gebruiken. In dat opzicht heeft de SuperUser Q & A-post van vandaag het antwoord op de vraag van een verwarde lezer.

    De Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een gemeenschapsgedreven groep van Q & A-websites.

    De vraag

    SuperUser-lezer Hendre wil weten wanneer het beter te gebruiken is #! / Bin / bash in plaats van #! / Bin / sh in shellscripts:

    Wanneer is het geschikter om te gebruiken #! / Bin / bash liever dan #! / Bin / sh in een shellscript?

    Wanneer is het beter om te gebruiken #! / Bin / bash in plaats van #! / Bin / sh in een shellscript?

    Het antwoord

    SuperUser contributor grawity heeft het antwoord voor ons:

    Kortom:

    • Er zijn verschillende shells die een superset van de POSIX sh-specificatie implementeren. Op verschillende systemen, / Bin / sh kan een link zijn naar ash, bash, dash, ksh, zsh, etc. Het zal echter altijd sh-compatibel zijn, nooit csh of fish.
    • Zolang je je alleen op sh-functies houdt, kun je (en waarschijnlijk zelfs) gebruiken #! / Bin / sh en het script zou goed moeten werken, ongeacht welke shell het is.
    • Als u bash-specifieke functies (dat wil zeggen arrays) gaat gebruiken, moet u specifiek bash aanvragen omdat, zelfs als / Bin / sh roept al bash op uw systeem aan, misschien niet op het systeem van iedereen, en uw script zal daar niet worden uitgevoerd. Hetzelfde geldt natuurlijk voor zsh en ksh.
    • Zelfs als het script alleen voor persoonlijk gebruik is, merkt u misschien dat sommige besturingssystemen veranderen / Bin / sh tijdens upgrades. Bijvoorbeeld, op Debian was het bash, maar werd later vervangen door het zeer minimale streepje. Scripts die bashismen gebruikten maar hadden #! / Bin / sh brak plotseling.

    Echter:

    • Zelfs #! / Bin / bash is dat niet juist? Op verschillende systemen kan bash leven / Usr / bin, / Usr / pkg / bin, of / Usr / local / bin.
    • Een betrouwbaardere optie is #! / usr / bin / env bash, welke gebruikt $ PATH. Hoewel de env-tool zelf ook niet strikt is gegarandeerd, / Usr / bin / env werkt nog steeds op meer systemen dan / Bin / bash doet.

    Heb je iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread.

    Beeldcredits: Wikipedia