Eu criei um script bash, mas quando tento executá-lo, recebo
#!/bin/bash no such file or directory
Eu preciso executar o comando: bash script.sh
para que ele funcione.
Como posso consertar isso?
bash
shell-script
executable
shebang
Nicolas de Fontenay
fonte
fonte
#!/usr/bin/env bash
em vez de#!/bin/bash
e também à procura aqui ...Respostas:
Esse tipo de mensagem geralmente ocorre devido a uma linha falsa, como um retorno de carro extra no final da primeira linha ou uma lista técnica no início.
Corre:
e veja como termina.
Isto está errado:
Isso também está errado:
Isto está correto:
Use
dos2unix
(oused
,tr
,awk
,perl
,python
...) para corrigir o seu script se esta é a questão.Aqui está um que removerá os CRs de lista técnica e de cauda:
Observe que o shell que você está usando para executar o script afetará levemente as mensagens de erro exibidas.
Aqui estão três scripts que mostram apenas o nome (
echo $0
) e as seguintes linhas de shebang:correctScript:
scriptWithBom:
scriptWithCRLF:
Sob bash, executá-los mostrará estas mensagens:
Executar os falsos chamando explicitamente o intérprete permite que o script CRLF seja executado sem nenhum problema:
Aqui está o comportamento observado em
ksh
:e abaixo
dash
:fonte
hexdump -C yourscript | head -n 1
. Eu ainda usariados2unix yourscript
para consertar isso.#!/bin/bash no such file or directory
mensagem de erro, pois não há motivo para tentar executar ou abrir#!/bin/bash
. É o/bin/bash<CR>
que seria executado.dos2unix
também remove uma lista técnica UTF-8. Uma lista técnica UTF-8 poderia ter explicado a mensagem de erro.Isso também pode ser causado por uma lista técnica em um script UTF-8. Se você criar o script no Windows, às vezes você recebe algum lixo no início do arquivo.
fonte
Na verdade, o shebang certo para o script bash é o seguinte:
Porque, no freeBSD, o bash está localizado em
/usr/local/bin/bash
fonte
Você pode usar o vi para corrigir os dois problemas, se eles existirem:
fonte
Se você não possui o dos2unix, é uma maneira de corrigir esse problema.
fonte
Marca de ordem de bytes (BOM)
Isso pode ser causado por uma lista técnica. Na Wikipedia, uma BOM é uma
Infelizmente, não sinaliza nada para o kernel do Linux que lida com a linha she-bang. Você pode verificar se possui uma lista técnica usando
file
,Ou você pode fazer o hexadump dos primeiros caracteres e verificar se eles correspondem a algum dos caracteres da lista técnica manualmente.
Você pode retirar os caracteres da lista técnica depois de conhecê-los assim,
fonte
Eu tive o problema ao adicionar acidentalmente um executável bash errado ao arquivo
PATH
e porque no meu script o#!/usr/bin/env bash
shebang mais flexível foi usado (pegue o primeiro executável do bash no caminho).Instalei o GIT for Windows para trabalhar em
cygwin
conjunto com as GUIs do Windows GIT (não estava funcionando com o git nativo do cygwin ...).#!/bin/bash
Resolvi isso agora, mudando para sheband e removendo o GIT para WindowsPATH
.fonte
Experimentar
#!/bin/bash
Segunda coisa:
find / -name bash
Terceira coisa:
ls -al /bin/bash
fonte
which bash
. Sabemos que está encontrando um porque está trabalhandobash script.sh
.