Bij het uitvoeren van een shell-script wordt de volgende foutmelding teruggegeven:
-bash: ./log_job.sh: /bin/bash^M: slechte interpreter: Geen dergelijk bestand of map Foutoorzaken:
.sh script is geschreven onder het Windows-systeem, dus er kunnen onzichtbare tekens zijn, is het uit bovenstaande foutmelding zeer waarschijnlijk dat het scriptbestand in DOS-formaat is, dat wil zeggen dat het einde van elke regel wordt geïdentificeerd door \r\n, en de ASCII-code respectievelijk 0x0D 0x0A.
De fout die wordt weergegeven bij het uitvoeren van een shellscript komt voornamelijk doordat het shell-scriptbestand in DOS-formaat is, dat wil zeggen het einde van elke regel wordt geïdentificeerd door \r\n, en het einde van het UNIX-formaat bestand door \n.
Speciale opmerking: ^M is niet de ^ en letter M die wordt geproduceerd door de toets shift + 6, het is een teken, de ASCII is 0x0D, de manier om het te genereren is eerst op CTRL+V te drukken en dan enter (of CTRL+M)
oplossing
Er zijn verschillende manieren om te controleren of het scriptbestand in DOS- of UNIX-formaat is.
(1) Controleer het formaat van het script: cat -Een bestandsnaam Uit de weergaveresultaten kan worden afgeleid dat de bestandsregel die eindigt in dos-formaat ^M$ is, en de bestandsregel die eindigt in unix-formaat $.
(2) Wijzig het formaat van het script: vi-bestandsnaam om het bestand te openen en uit te voeren:set ff=UNIXStel het bestand in op Unix en voer het uit:wq, opgeslagen in UNIX-formaat.
(3) Controleer het formaat van het script: cat -Een bestandsnaam Uit het weergaveresultaat kun je afleiden dat de bestandsregel die eindigt in dos-formaat ^M$ is, en de bestandsregel die eindigt in Unix-formaat $.
|