Existem dois erros. Resumindo, essa é a correção específica que eu sugeriria (detalhes a seguir):
#!/bin/sh
UBUNTU_MENUPROXY=0 /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Bad Hashbang Line
Como Shutupsquare diz , o seu hashbang line ( detalhes técnicos ) deve começar com um #!
em vez de apenas !
.
Isso está causando a primeira de suas duas mensagens de erro e impedirá que seu script seja executado como ./run.sh
, mas não é a razão pela qual seu script não está executando AptanaStudio3
(porque a linha hashbang não é necessária para sh run.sh
sintaxe de chamada).
A propósito, quando você executa sh run.sh
, ele executa seu script com sh
como o intérprete. Mas com a linha de hashbang #!/bin/bash
, executar ./run.sh
executaria seu script com bash
como o intérprete. Esse script não depende de forma alguma dos recursos avançados de bash
, e embora o uso de memória adicional de bash
seja quase certamente insignificante para esse aplicativo, talvez você ainda deseje gravar a linha de hashbang, de modo que ./run.sh
execute o script com sh
:
#!/bin/sh
Uso incorreto de export
O problema principal, que está causando sua segunda mensagem de erro e é o motivo pelo qual AptanaStudio3
falha na execução, é que você está usando export
incorretamente. O comando export
não executa comandos. Então, seu comando está sendo interpretado como uma variável de ambiente em si.
-
export
pode definir e exportar uma variável de ambiente:export NAME=value
-
export
também pode exportar uma variável de ambiente (com qualquer valor atual):export NAME
export
não aceita a sintaxe NAME=value command
ou NAME command
.
Assumindo que sua meta é executar o comando /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
com a variável UBUNTU_MENUPROXY
definida e definida como 0
, você deve soltar a palavra export
:
UBUNTU_MENUPROXY=0 /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Essa é a maneira padrão de executar um comando com um ambiente modificado, a partir de um shell.
O objetivo de export
é exportar variáveis para os ambientes de todos os processos filhos lançados posteriormente (por exemplo, todos os comandos executados em seu script). Portanto, executar export UBUNTU_MENUPROXY=0
em sua própria linha, seguido pelo comando AptanaStudio3
, como Shutupsquare sugere , funcionará e terá o mesmo efeito, e é uma maneira perfeitamente boa e aceitável de fazê-lo.
Eu prefiro a maneira que sugeri acima ( sem export
) porque:
- Semanticamente, seu objetivo não é exportar nada, mas executar um comando único com um ambiente modificado. Usar
export
pode causar confusão para os outros que leem seu roteiro (ou para você mesmo mais tarde), e como uma consideração secundária é sem dúvida menos elegante. - Com
export
, você precisa de dois comandos; usando o caminho sem ele, você precisa de apenas um.
Leitura opcional: o comando env
funciona (mais ou menos) como você estava tentando usar export
Finalmente, é um comando que aceita a sintaxe NAME=value command
. Este comando é env
. Não há razão para usá-lo neste script de shell - sua função, nesse uso básico, é fornecer (parte de) o poder de um shell ao executar um comando com um ambiente modificado, e você já tem esse poder.
No entanto, em algumas circunstâncias, fora do shell script, você pode achar necessário definir uma variável de ambiente para um comando e executar esse comando (e fazer essas coisas em um único comando). Em contextos em que apenas o uso da linha VARIABLE=value command
não é suportado, você pode usar:
env VARIABLE=value command
Você não precisa disso aqui. Todos os shells ao estilo Bourne (por exemplo, sh
, dash
, bash
, ksh
, zsh
) suportam VARIABLE=value command
.