我正在尝试创建一个可以调整图像大小的简单脚本。它如下:
#!/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 found
和mogrify 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
。由于您在脚本中使用了它,因此它覆盖了搜索路径,无法再找到未完全指定的任何命令,包括cp
和mogrify
,因此出现了两个错误。
使用其他变量代替“PATH”。如果你不确定,可以先尝试echo $YOUR_VARIABLE
看看它是否有值。