Kun shell-skripti suoritetaan, palautetaan seuraava virhe:
-bash: ./log_job.sh: /bin/bash^M: huono tulkitsija: Ei tällaista tiedostoa tai hakemistoa Virhe aiheuttaa:
.sh skripti on kirjoitettu Windows-järjestelmällä, joten siinä voi olla näkymättömiä merkkejä. Yllä olevan virhekehotteen perusteella on hyvin todennäköistä, että skriptitiedosto on DOS-muodossa, eli jokaisen rivin loppu tunnistetaan \r\n-muodossa ja sen ASCII-koodi on 0x0D, 0x0A vastaavasti.
Shell-skriptin suorituksessa näkyvä virhe johtuu pääasiassa siitä, että shell-skriptitiedosto on DOS-muodossa, eli jokaisen rivin loppu tunnistetaan \r\n:llä ja UNIX-tiedoston loppu tunnistetaan \n:llä.
Erityishuomautus: ^M ei ole se ^ ja kirjain M, joka syntyy näppäimen siirrosta + 6, vaan merkki, sen ASCII on 0x0D, tapa generoida se painamalla ensin CTRL+V ja sitten enter (tai CTRL+M)
ratkaisu
On useita tapoja tarkistaa, onko skriptitiedosto DOS- vai UNIX-muodossa.
(1) Tarkista skriptin muoto: cat -A tiedostonimi Näyttötulosten perusteella voidaan arvioida, että dos-muotoon päättyvä tiedostorivi on ^M$ ja unix-muotoon päättyvä rivi on $.
(2) Muokkaa skriptin muotoa: vi tiedostonimi, jotta tiedosto avautuu ja suoritetaan:set ff=unixAseta tiedosto unixiksi ja suorita:wq, tallennettuna UNIX-muodossa.
(3) Tarkista skriptin muoto: cat -A tiedostonimi Näyttötuloksen perusteella tiedostorivi, joka päättyy dos-muotoon, on ^M$ ja unix-muotoon päättyvä tiedostorivi on $.
|