När ett shell-skript körs returneras följande fel:
-bash: ./log_job.sh: /bin/bash^M: dålig tolk: Ingen sådan fil eller katalog Felorsaker:
.sh skript är skrivet under Windows-systemet, så det kan finnas osynliga tecken, från felmeddelandet ovan, är det mycket troligt att skriptfilen är i DOS-format, det vill säga slutet på varje rad identifieras med \r\n, och dess ASCII-kod är 0x0D, 0x0A respektive.
Felet som visas vid exekvering av ett shell-skript beror främst på att shell-skriptfilen är i DOS-format, det vill säga slutet på varje rad identifieras med \r\n, och slutet på UNIX-formatfilen identifieras med \n.
Särskild notis: ^M är inte ^ och bokstaven M som produceras av knappskiftet + 6, det är ett tecken, dess ASCII är 0x0D, sättet att generera det är att trycka på CTRL+V först och sedan enter (eller CTRL+M)
lösning
Det finns flera sätt att kontrollera om skriptfilen är i DOS- eller UNIX-format.
(1) Kontrollera formatet på skriptet: cat -A filnamn Utifrån visningsresultaten kan man bedöma att filraden som slutar i dos-format är ^M$, och filraden som slutar i unix-format är $.
(2) Ändra formatet på skriptet: vi filnamn för att öppna filen och köra:set ff=unixStäll in filen till Unix och kör:wq, sparad i UNIX-format.
(3) Kontrollera skriptets format: cat -Ett filnamn Utifrån visningsresultatet kan du bedöma att filraden som slutar i dos-format är ^M$, och filraden som slutar i unix-format är $.
|