Questão Não é possível usar "./" para executar um script de shell


Talvez alguém aqui possa me ajudar. Ter instalado o Ubuntu 12.04 LTS (kubuntu) em duas máquinas. Os arquivos .bashrc e .bash_profile são idênticos, pois as estruturas de arquivos em cada máquina são as mesmas.

Na máquina 1 eu executo scripts bash dentro de uma janela de terminal com o simples: ./scriptname.sh

Na máquina 2, não consigo fazer isso e devo usar: sh scriptname.sh Também não posso usar ./ ​​e concluir a tabulação do nome do arquivo de script.

Todos os bits executáveis ​​estão definidos corretamente, todos os arquivos e pastas possuem as permissões corretas. No cabeçalho dos scripts, o shebang está definido corretamente.

Alguma idéia de por que isso estaria ocorrendo?

Felicidades


4
2017-11-05 01:23


origem


também perguntou sobre unix e linux e stackoverflow - glenn jackman
Isso é para root ou um usuário não-root? Faz echo $SHELL em ambas as máquinas confirmam que o shell é bash? - Lars Rohrbach
usuário não-root, echo $ SHELL retorna / bin / bash em ambas as máquinas - adeliefan


Respostas:


A única coisa que causaria isso é se o script não é executável. Eu sei que você disse que o bit executável está definido, mas certifique-se:

chmod +x scriptname.sh

2
2017-11-05 02:07



Não - é definitivamente definido certo. Eu acho que tem que haver algo errado com a minha configuração ambiental (.bashrc ou .bash_profile), mas não consigo ver onde ela está escondida. - adeliefan


Já li sobre vários problemas decorrentes do preenchimento automático, não necessariamente com 12.04, e as duas opções a seguir parecem valer a pena tentar:

Primeira tentativa desabilitando a conclusão programável bash: Comente estas três linhas em ambos /etc/bash.bashrc e no usuário $HOME/.bashrc:

 if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
     . /etc/bash_completion
 fi

Você pode achar que essas linhas já foram comentadas com # na frente, nesse caso, deixe-o como está.

Então, em segundo lugar, tente reinstalando a conclusão do bash:

sudo apt-get purge bash-completion
sudo mv /etc/bash_completion.d /etc/bash_completion.d.bak
sudo apt-get install bash-completion

1
2017-11-05 02:13



Obrigado pela sugestão Lars, não fez diferença embora. - adeliefan
Bem, droga Eu presumo que você tenha logado novamente depois de fazer isso? - Lars Rohrbach


Os erros que você vê podem ser causados ​​ao tentar executar um executável em uma mídia montada com a propriedade "noexe". Digite mount e examine as propriedades do dispositivo que contém o script. Altere as propriedades / etc / fstab da montagem, se necessário.


1
2017-11-05 05:59