在 bash 脚本中运行标准命令

Vla*_*lov 2 command-line bash scripts

我正在编写一个 bash 脚本来自动化几个操作:

#!/bin/bash         

echo "Hello, World"
NAME="${1}"
PATH="${2}"
echo $NAME
echo $PATH
eval "ls"
Run Code Online (Sandbox Code Playgroud)

我将调用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
Run Code Online (Sandbox Code Playgroud)

怎么来的?为什么没有找到?也许我应该导入一个带有脚本的目录?

edw*_*win 8

该变量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"
Run Code Online (Sandbox Code Playgroud)

笔记。您可以将最后一行从 更改eval "ls"为 just ls

您可以运行man bash以获取更多信息。