执行 bash 脚本时出错 -> 未找到命令

执行 bash 脚本时出错 -> 未找到命令

我在这里编写了这个脚本,但出现了错误

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

一般来说,使用完整路径在脚本中不依赖于预设的搜索路径。

  1. which wget会告诉你 wget 的路径(可能/usr/bin/wget
  2. 你更改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 解释道

相关内容