在bash脚本中运行标准命令
我正在编写一个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
怎么会? 为什么没找到? 也许我应该用脚本导入一个目录?
变量PATH
是一个特殊的shell变量。 它定义了可以在其中找到可执行文件/命令的目录列表。
在PATH="${2}"
,您清除了PATH
的默认值,现在shell不知道在哪里可以找到ls
命令。 例如,可以在目录/bin
找到ls
,但是您修改了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
以获取更多信息。
您收到此错误消息是因为您已将PATH
环境变量更改为命令行参数( ${2}
),该参数不包含实际二进制文件。