Em nosso sistema escolar, somos capazes de executar arquivos de script sem digitar bash
ou csh
ou o que você sem indicar qual o tipo de script que é. No Ubuntu, no entanto, sou obrigado a digitar, bash script.bash
por exemplo. Isso sempre é necessário no Ubuntu ou é alguma configuração que eu posso mudar?
11
.sh
para scripts bash. Geralmente, as extensões de arquivo não são usadas para scripts executáveis no mundo UNIX.Respostas:
Certifique-se de iniciar o script com
./script
o caminho completo ou o que for. Apenasscript
pode não funcionar (funciona se o diretório estiver dentro$PATH
, como/usr/bin
), pois nos sistemas UNIX não é um hábito ter o diretório atual no seu caminho (por razões de segurança, e é bom!)Verifique se o script é executável, por exemplo: o
chmod +x script
tornará executável.Certifique-se de ter
#!/bin/bash
a primeira linha do seu script. Certifique-se também de que ele não seja editado com algum tipo de editor do Windows, pois geralmente usa o "tipo DOS" de eol (fim de linha) que difere do UNIX (se a lista de verificação acima estiver boa, mas você ficou "ruim" intérprete: não existe esse arquivo ou diretório ", aproximadamente, mesmo que seja / bin / bash, esse é geralmente o motivo, pois o não imprimível - então você geralmente não o vê - \ r será tratado como parte do caminho do intérprete)Outros já mencionados: é importante ter,
/bin/bash
se você usar os recursos do bash, também/bin/sh
foi vinculado ao link/bin/bash
, mas hoje em dia (até onde eu notei) ele é vinculado ao linkdash
que não fornece compatibilidade com o bash, apenas o POSIXsh
. É muito importante, mesmo os softwares caros da nossa empresa têm esse problema: os scripts contêm#!/bin/sh
a primeira linha, mas também depende das funcionalidades do bash.fonte
#!/usr/bin/env bash
que é um pouco mais portátil.Verifique se a primeira linha do arquivo diz:
Se o shebang for
#!/bin/sh
, você não deve usar nenhum recurso específico do bash, apenas os recursos do POSIX. Mesmo que/bin/sh
seja um link simbólico parabash
, o bash será executado no modo de compatibilidade com POSIX quando executado como sh, desativando alguns (mas não todos) os recursos do bash.Você também precisará garantir que o script seja executável, é claro.
fonte
Uma alternativa, fortemente desencorajado maneira está adicionando
.
aPATH
.ou
O problema dessa abordagem é que, no primeiro caso, qualquer comando do sistema poderia ser substituído pelos executáveis do diretório atual e, no último caso, comandos desconhecidos ainda podiam ser substituídos.
Considere o seguinte:
Arquivo: ls
Muito provavelmente você nem notaria até que seja tarde demais.
fonte
echo
por exemplo, aquele no seu diretório será usado simplesmente porque esse diretório é definido naPATH
variável antes de/bin
. O Shell simplesmente procura comandos em diretórios específicos, dependendo de sua ordemPATH
, e não substitui / destrói nada. Mas sim, isso tem implicações