我正在编写一个 bash 脚本来自动执行几个操作:
#!/bin/bash
echo "Hello, World"
NAME="${1}"
PATH="${2}"
echo $NAME
echo $PATH
eval "ls"
我将要打电话ls, ffmpeg
并发出很多其他命令。
但是运行我的脚本却出现以下错误:
/var/www/html# ./life.sh test midhand.mp4
+ ./life.sh test midhand.mp4
Hello, World
test
midhand.mp4
./life.sh: line 9: ls: command not found
怎么回事?为什么找不到?也许我应该导入一个包含脚本的目录?
答案1
该变量PATH
是一个特殊的 shell 变量。它定义了可执行文件/命令所在的目录列表。
在行中PATH="${2}"
,您删除了的默认值PATH
,因此 shell 不知道在哪里找到该ls
命令。例如,ls
可以在目录中找到/bin
,但您修改PATH
为具有值midhand.mp4
(第二个参数),特别是PATH
不包含/bin
,因此您的 shell 找不到该ls
命令。
尝试这个:
#!/bin/bash
echo "Hello, World"
the_name="${1}"
the_path="${2}"
echo "PATH is '$PATH'"
echo $the_name
echo $the_path
eval "ls"
笔记。您可以将最后一行从 更改eval "ls"
为ls
。
您可以运行man bash
以获取更多信息。
答案2
您收到此错误消息是因为您将PATH
环境变量更改为命令行参数(${2}
),但该参数不包含实际的二进制文件。