在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} ),该参数不包含实际二进制文件。