为什么这个 shell 脚本不起作用?

为什么这个 shell 脚本不起作用?

我正在尝试创建一个可以调整图像大小的简单脚本。它如下:

#!/bin/bash
echo "Script executed from: ${PWD}"

#copy image and resize it
OUTPUT_IMG="newimg.png"
PATH="${PWD}/${OUTPUT_IMG}"

cp "$1" ${OUTPUT_IMG}
mogrify -resize 400x300 ${PATH}

我正在使用 1 个参数调用脚本(要调整大小的图像)

script thisImage.png

但我收到错误cp command not foundmogrify command not found

所有这些都不需要脚本,这意味着我已经安装了所有这些应用程序。

有任何想法吗?

答案1

该变量PATH具有预定义的含义:它是程序的搜索路径。当您键入命令名称时,shell(或您指示执行此命令的任何其他程序)会在变量中提到的目录之一中查找可执行文件PATH。在您的脚本中,cp会在当前目录的名为 的子目录中搜索newimg.png(该子目录甚至不存在,更不用说包含名为 的可执行文件了)cp

在脚本中使用不同的变量名。按照惯例,对程序有意义的环境变量通常全部大写。对于脚本的本地变量,可以使用小写字母以避免冲突(变量名不区分大小写)。更好的方法是使用一个更重要的名称(因为只有大小写不同的变量会让人感到困惑)。

#!/bin/bash
echo "Script executed from: ${PWD}"

#copy image and resize it
output_image_name="newimg.png"
output_image_path="${PWD}/${OUTPUT_IMG}"

cp "$1" "$output_image_name"
mogrify -resize 400x300 "$output_image_path"

不过,这里没有必要有时使用文件名,有时使用完整路径。此外,与其复制文件,然后使用 就地修改它,mogrify不如convert直接使用 — 除了写入不同的输出文件外,convert它与 相同。mogrify

#!/bin/bash
output_image="newimg.png"
convert -resize 400x300 "$1" "$output_image"

答案2

PATH是一个预定义的 shell 变量,用于保存命令的搜索路径。执行 即可查看其默认值echo $PATH。由于您在脚本中使用了它,因此它覆盖了搜索路径,无法再找到未完全指定的任何命令,包括cpmogrify,因此出现了两个错误。

使用其他变量代替“PATH”。如果你不确定,可以先尝试echo $YOUR_VARIABLE看看它是否有值。

相关内容