在 Bash 脚本中运行标准命令

在 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

怎么回事?为什么找不到?也许我应该导入一个包含脚本的目录?

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

相关内容