command não disponível no script bash

0

Minha empresa tem uma ferramenta personalizada que instalamos no Linux para carregar arquivos em um servidor (entre outras coisas) chamado oTools . Quando abro um novo Terminal, posso executar (de qualquer pasta) oTools upload file e o arquivo é enviado para o servidor.

No entanto, a ferramenta não tem a opção de fazer upload de vários arquivos de uma só vez. Então, eu estou tentando construir um script bash para fazer isso. Aqui está o código que eu criei

#!/bin/sh

for file in ./folder/*
do
  oTools upload $file
done

Mas estou com o seguinte erro:

./upload-all.sh: oTools: not found

Eu verifiquei meu arquivo .bashrc e ele contém o caminho para oTools:

alias oTools="/home/user/folder/oTools-cli"

Eu também tentei colocar o caminho completo no meu script (o caminho acima, que está no arquivo .bashrc ), mas estou recebendo o mesmo problema. Eu sou um iniciante com script bash, e eu tentei fazer o mesmo código usando ls em vez da minha ferramenta instalada e funcionou ...

Então, como posso criar um script bash para reconhecer minha ferramenta personalizada?

    
por Leonardo Alves Machado 14.03.2018 / 21:26

3 respostas

2

Quando você escreve um script, ele normalmente não usa seus aliases.

Você pode considerar especificar o comando explicitamente em seu script:

#!/bin/sh
oTools="/home/user/folder/oTools-cli"
for file in ./folder/*
do
    ${oTools} upload "${file}"
done
    
por 14.03.2018 / 21:40
5

Você está enfrentando pelo menos dois problemas:

  • Os aliases não são expandidos quando o shell não é interativo, a menos que a opção expand_aliases shell esteja definida usando shopt .

  • .bashrc geralmente contém configuração para shells interativos, não para scripts (também conhecidos como shells não interativos).

Existem algumas soluções:

# Set expand_aliases option and add the alias (in your script)
shopt -s expand_aliases
alias oTools="/home/user/folder/oTools-cli"

# Create a function instead of an alias (in your script)
oTools() { /home/user/folder/oTools-cli "$@"; }

# Add /home/user/folder to your PATH (in your .profile)
PATH="/home/user/folder:$PATH"
    
por 14.03.2018 / 22:35
0

Este é um problema que eu corri quando executando scripts via cron. Não tenho certeza se isso se aplica aqui, mas aqui tente adicionar seu caminho no início do script. Algo como ...

    #!/bin/bash

    PATH="/your/path"
    ...
    
por 14.03.2018 / 21:40