我在这里编写了这个脚本,但出现了错误
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
我甚至尝试在每个变量前后设置一个“,所以它看起来像
COMMAND="wget --user="$UNAME" --password="$PWD" "$URL" -O "$PATH"-"$DATE".csv"
但是当我 回显 $COMMAND它看起来非常正确,事实上,当我复制它并插入它时,它就起作用了。
答案1
您正在覆盖$PATH
变量,该变量决定在哪些目录中搜索可执行文件(如wget
):
PATH="/root/test/IA"
因此 shell 仅查找/root/test/IA
命令wget
。将变量名称更改为其他名称。
答案2
一般来说,使用完整路径在脚本中不依赖于预设的搜索路径。
which wget
会告诉你 wget 的路径(可能/usr/bin/wget
)- 你更改
COMMAND="wget --user...."
为COMMAND="/usr/bin/wget --user...."
(或你的 wget 所在的位置)
答案3
你可能想这样做:
PATH=/root/test/IA:$PATH
代替
PATH=/root/test/IA
为了保留当前的 PATH 变量,但 /root/test/IA 中的可执行文件优先于当前 PATH 中其他类似名称的可执行文件。
人们普遍认为使用完整路径的不良做法在脚本中可执行文件(即不使用 PATH 概念),因为这会破坏脚本的可移植性,更重要的是,它会阻止您用自己的可执行文件覆盖发行版默认的可执行文件。例如,大多数发行版将 wget 安装在 /usr/bin 中。如果您想在 /usr/local/bin 或 ~/.bin 中安装另一个版本的 wget,而不删除发行版默认的 wget,但在脚本中使用您自己的 wget,那么您应该设置 PATH=$HOME/bin:/usr/local/bin:$PATH。如果您进行跨平台开发,则 PATH 的使用是一项关键特性。在这种情况下,您可能安装了五个不同的 gcc 工具链。您不想拥有五个不同版本的编译脚本,因此您依靠 shell 对 PATH 的使用来选择正确的工具集。
请注意,如果您打算从 crontab 运行此脚本,则可能必须明确将目录添加到 PATH 变量中,因为默认的 cron PATH 仅包含几个目录,如下所示gregseth 解释道。