erro ao executar o script bash - comando não encontrado

1

Eu fiz este script aqui e recebo o erro

IA-exporto.sh: 13: wget: not found

Eu tentei mudar o "by" e misturei tudo e rearranjei, mas isso não vai acontecer ..

#!/bin/bash
UNAME="maximilian"
PWD="password"
DATE='date +%Y\-%m\-%d'
DAY='date +%d'
MONTH='date +%m'
YEAR='date +%Y'

PATH="/root/test/IA"

URL="http://www.my-corpo.com/_backend/index.php?date=$YEAR-$MONTH-$DAY&view=csv"
COMMAND="wget --user=$UNAME --password=$PWD $URL -O $PATH-$DATE.csv"
$COMMAND

eu até tentei definir antes e depois de cada variável a ", então parece que

COMMAND="wget --user="$UNAME" --password="$PWD" "$URL" -O "$PATH"-"$DATE".csv"

mas quando eu echo $ COMMAND parece muito certo, na verdade, quando copio e insiro, funciona ...

    
por Harrys Kavan 14.02.2013 / 18:52

3 respostas

4

Você está substituindo a variável $PATH , que determina quais diretórios são pesquisados por executáveis (como wget ):

PATH="/root/test/IA"

Portanto, o shell está procurando apenas em /root/test/IA para o comando wget . Altere o nome da sua variável para outra coisa.

    
por 14.02.2013 / 18:59
2

Geralmente, é considerado uma boa prática usar caminhos completos em scripts para não depender de caminhos de pesquisa predefinidos.

  1. which wget informará o caminho para wget (provavelmente /usr/bin/wget )
  2. você altera COMMAND="wget --user...." para COMMAND="/usr/bin/wget --user...." (ou onde quer que seu wget esteja)
por 14.02.2013 / 22:40
1

Você provavelmente quer fazer:

    PATH=/root/test/IA:$PATH

em vez de

    PATH=/root/test/IA

Para preservar sua variável PATH atual, mas dê os executáveis em / root / test / IA preferência sobre outros executáveis nomeados de forma semelhante no PATH atual.

Geralmente, considera-se a má prática usar caminhos completos para executáveis (ou seja, não usar o conceito PATH) em scripts, pois isso destrói a portabilidade dos scripts e, mais importante, impede que você sobrepondo os executáveis padrão de distribuição com os seus próprios. Por exemplo, a maioria das distros instala o wget em / usr / bin. Se você deseja instalar outra versão do wget em / usr / local / bin ou em ~ / .bin, sem remover o wget padrão distro, mas usar seu próprio wget no script, então você deve definir PATH = $ HOME / bin: / usr / local / bin: $ PATH. Esse uso do PATH é um recurso crítico se você fizer o desenvolvimento entre plataformas. Nesta situação você pode ter cinco diferentes toolchains do gcc instalados. Você não precisa ter cinco versões diferentes de um script de compilação, portanto, você depende do uso do PATH pelo shell para selecionar o conjunto de ferramentas correto.

Observe que, se você pretende executar esse script a partir do crontab, pode ser necessário incluir explicitamente os diretórios na variável PATH, pois o PATH padrão do cron inclui apenas alguns diretórios, como gregseth explica .

    
por 14.02.2013 / 19:53