执行bash脚本时出错 – >命令未find

我在这里做了这个脚本,并得到错误

IA-exporto.sh:13:wget:找不到

我试图改变“通过`和混合在一起,重新排列,但它只是不会做..

#!/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 

我甚至试图设置每个variables之前和之后“,所以它看起来像

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

但是当我回声$ COMMAND它看起来非常正确,事实上,当我复制它,并插入它,它的工作..

您正在覆盖$PATHvariables,该variables确定search可执行文件的目录(如wget ):

 PATH="/root/test/IA" 

所以shell只在/root/test/IA查看wget命令。 改变你的variables名称。

通常,在脚本中使用完整path以取决于预设的searchpath是一种很好的做法。

  1. which wget会告诉你which wget的path(可能是/usr/bin/wget
  2. 你改变COMMAND="wget --user...."COMMAND="/usr/bin/wget --user...." (或者你的wget坐的地方)

你可能想要做的是:

  PATH=/root/test/IA:$PATH 

代替

  PATH=/root/test/IA 

为了保留当前的PATHvariables,但给予当前PATH中其他类似命名的可执行文件的/ root / test / IA首选项中的可执行文件。

在脚本中使用完整path来执行可执行文件(即不使用PATH概念)通常被认为是不好的做法 ,因为这会破坏脚本的可移植性,更重要的是,它会阻止您使用自己的脚本覆盖默认可执行文件。 例如,大多数发行版将wget安装在/ usr / bin中。 如果要在/ usr / local / bin或〜/ .bin中安装另一个版本的wget,而不是删除发行版默认的wget,而是在脚本中使用自己的wget,那么应该设置PATH = $ HOME / bin:在/ usr / local / bin目录:$ PATH。 如果您进行跨平台开发,PATH的这种使用是一个关键function。 在这种情况下,你可能会安装五个不同的gcc工具链。 你不需要有五个不同版本的编译脚本,所以你依靠shell使用PATH来select正确的工具集。

请注意,如果您打算从crontab运行此脚本,则可能必须将目录显式添加到PATHvariables,因为默认的cron PATH只包含几个目录,如gregseth所解释的 。