Suoritetaanko bash ja sh komentosarja eri tavalla? Suoritin shell-skriptin sekä bashilla että sh: llä ja sain saman tuloksen. Joten mikä ero on?
Kun suoritat vain ./executable, käyttääkö se bashia tai sh: tä?
Kommentit
Vastaa
Se riippuu käyttämästäsi järjestelmästä. Yksi monista käyttöjärjestelmistä, etenkin Linux-pohjaisista, sh on linkki bash -ohjelmaan.
Tällöin siellä ovat edelleen joitain eroja käyttäytymisessä, jossa bash yrittää olla enemmän kuin perinteinen bourne-kuori, kun sitä kutsutaan sh, mutta se hyväksyy silti useimmat basismit. / p>
Joissakin muissa käyttöjärjestelmissä, kuten Debian-pohjaisissa käyttöjärjestelmissä, sh tarjoaa dash, ei bash. Tällä on paljon suurempi ero, koska dash ei tue basismeja, jotka on suunniteltu puhtaaksi POSIX-kuoren toteutukseksi.
Omistetuissa käyttöjärjestelmissä sh tarjoaa usein joko POSIX-yhteensopiva ksh88, joka kuten dash, ei toteuta basismeja. Solaris 10: ssä ja sitä vanhemmissa versioissa sh on todennäköisesti vanhempi Bourne-kuori, joka edeltää POSIXia.
Joka tapauksessa olet todennäköisesti saanut sama tulos testisi kanssa yksinkertaisesti siksi, että komentosarjasi ei käyttänyt mitään bash -komentoa, vaihtoehtoa tai syntaksia.
Kun suoritat ./executable, mikä komentotulkki suoritetaan, riippuu olennaisesti .executable-komentosarjan alkuun kirjoitetusta shebangista. Se on bash, jos shebang määrittää sen:
#!/bin/bash ....
Jos shebangia ei ole ja soitat komentosarjaan POSIX-yhteensopivasta kuoresta komentosarja tulisi teknisesti suorittaa PATH: sta löydetyn ensimmäisen sh avulla. Monet shell-tulkit, kuten bash, dash ja ksh, pitävät itseään POSIXina niin tulkita käsikirjoitusta. Huomaa, että ympäristömuuttujaa SHELL ei käytetä tässä.
Kommentit
- Katsoin ympärillä
/binja huomasin, ettäshon symbolinen linkki linkkiindasheikäbash. Joten miten he juoksivat samalla tavalla? Se ei ollut ' oikeastaan käynnissä mitään bash-komentokomentoja, vain terminaalikomennot käyttämään muita paketteja '. - Jos komentotulkkikomentosi kutsuu vain peräkkäin muita komentoja, mikä tahansa komentotulkki ajaa sen samalla tuloksella. Ei mitään odottamatonta.
- Tämä ei ole ' t liittyvä kysymykseen, mutta mikä on tarkalleen ero
bashvälillä jadash? - Molemmat käyttävät Bourne-kuoren syntaksia. Kuten kirjoitin vastauksessani,
dashon POSIX-kuoristandardin puhdas toteutus. Toisaaltabashon kuori, jolla on melko suuri määrä laajennuksia ja epätyypillisiä ominaisuuksia. Jotkut ovat innoittamanaksh,ksh93ja muut kuoret, ja jotkut bash-spesifiset, tunnetaan bashismina. On olemassa työkalu nimeltä checkbashisms, joka auttaa tunnistamaan kaiken, mitä ei ole ehdottomasti siirrettävissä tietyssä komentosarjassa.
Vastaa
Kyllä se voi olla, mutta sen ei tarvitse olla. Nämä kaksi kuorta eivät ole samat, mutta perusasiat ovat yhteensopivia. Tarkista tämä viesti saadaksesi lisätietoja.
Voit tarkistaa käyttämäsi tulkin komentosarjassa seuraavalla rivillä:
ps h -p $$ -o args="" | cut -f1 -d" "
Voit määrittää nimenomaisesti kuoren, jota käytetään, kun komentosarja suoritetaan suoraan rivillä sheebang:
#!/bin/sh
tai
#!/bin/bash
$SHELLei käytetä päättämään, mikä kuori tulkitsee./executablekäsikirjoitus. Se ei välttämättä kerro ' myöskään sitä, mikä nykyinen kuori on.