sudo: ./abc.sh: comando não encontrado

3

Comandos digitados no terminal:

chmod 777 abc.sh
sudo ./abc.sh

Todo programa shell está dando o mesmo erro:

.sh: command not found

Incluindo este programa simples de abc.sh :

#!/bin/bash
# My first script
echo "Hello World!"

Saída de sudo od -c ./abc.sh :

0000000 # ! / b i n / b a s h \n # M y
0000020 f i r s t s c r i p t \n \n e
0000040 c h o " H e l l o W o r l d
0000060 ! " \n \n
0000064

    
por Nisheet Verma 24.01.2016 / 12:28

2 respostas

1

Você fornecerá a saída disso (no diretório em que o abc.sh reside):

$ type ./abc.sh
$ ./abc.sh

O comando type primeiro verificará se o seu ./abc.sh está localizado. Se não estiver, sairá dizendo que não é possível encontrar o arquivo ./abc.sh . Então teríamos que descobrir o que é o nome do arquivo que não pode ser encontrado.

Além disso, qual é o nome do editor que você está usando para criar seu arquivo de script. Se você inadvertidamente usou uma edição do Windows (através do wine) isso pode causar problemas com os terminadores de linha no seu script.

Tente usar e editar como nano ou gedit . Você pode usar um desses editores recomendados e criar o mesmo arquivo de exemplo que, abc1.sh e garantir que você tenha as linhas exatamente como elas são na sua pergunta editada.

A propósito, a única maneira de reproduzir a mensagem de erro que você deu em sua pergunta é omitindo a parte abc do arquivo abc.sh .

Esses comandos produzirão o erro da sua mensagem:

$ ./.sh
$ sudo .sh

Tenha em mente que cada erro é único e importante no diagnóstico do problema. É importante testar e expor o script e fornecer a mensagem de erro exata.

Por exemplo, um erro permission denied pode ser causado ao tentar executar um arquivo que não tenha o bit de execução definido. Isso pode ser definido executando o comando que você referencia em sua pergunta:

$ chmod 777 abc.sh

Você também pode obter o erro permission denied tentando executar um arquivo que pertença a root e não tenha o conjunto de bits do mundo ou do grupo para leitura. Isso pode ser um efeito colateral de usar sudo em seu espaço pessoal quando não for necessário. O chmod 777 que você mencionou na sua pergunta também resolveria o problema dando permissão de leitura e execução a todos os usuários.

Se você criou o arquivo de forma que ele seja de propriedade root, você terá que usar o comando elevated para alterar as propriedades. Isso lhe dará acesso para executar o arquivo:

$ sudo chmod 777 abc.sh

Se você tiver um motivo para controlar quem pode executar ou acessar o script, dê uma olhada em algumas das outras opções de chmod :

$ man chmod

Como sugerido nos comentários da sua pergunta, você não deve usar o comando elevado sudo para executar os scripts que está testando. Se o teste estiver no seu espaço pessoal, você pode fazer com que as áreas do seu espaço pessoal sejam de propriedade da raiz ... perder o acesso pessoal a essas áreas. Alguns scripts mal formados também podem causar corrupção em outros arquivos do sistema operacional. O erro de digitação de sua tentativa de executar o script abc.sh é um exemplo de que erros podem acontecer. Se você decidiu remover seu script ou diretório de trabalho de script e erroneamente teve um espaço no lugar errado, isso pode causar sérios problemas onde você menos espera.

    
por L. D. James 24.01.2016 / 12:29
2

Bem, pelo que você nos disse, deveria estar funcionando perfeitamente ... Isto é, se a partição na qual ele está armazenado suportar permissões de estilo unix / posix. Eu me deparo com esse erro o tempo todo, se eu tentar executar um script de uma partição vfat ou ntfs. Considerando que ele é montado em um local chamado trabalho, isso é em uma unidade USB com partição formatada em gordura ou ntfs? Se for, você deve prefixar o shell antes do script. Verifique a partição e esse pode ser o problema. Mova-o para o seu diretório pessoal e ele pode ser executado facilmente em um sistema de arquivos que suporta permissões unix / posix.

Verifique se esse é o caso:

mount |grep nisheet

Diz vfat, fuseblock ou ntfs? Se sim ...

Duas opções:

  1. Prefixe o shell na frente do script a ser executado:

bash abc.sh

  1. Mova-o para um sistema de arquivos que suporte permissões Unix / Posix:

Ex:

mv abc.sh ~/
cd ~
chmod +x abc.sh
./abc.sh
    
por darkdragn 25.01.2016 / 16:49