我编写了一个 bash 脚本,该脚本根据输入参数获取三个路径,然后获取路径中的图像名称/文件名。类似于:我提供:AA=/home/user 然后它使用...
我编写了一个 bash 脚本,它根据输入参数获取三个路径,然后获取路径中的图像名称/文件名。
类似于:
我提供:
AA=/home/user
然后它使用 find 命令来获取
/home/user/dir2/images/dir/tellmeimage1fun.bin
最后我必须得到 tellmeimage1fun.bin 作为输出。
脚本:
#!/bin/bash
echo "arg0 n/k/d"
AA=$1
CC=$3
PATH1="`find $AA/dir2/images/dir/ -name *image1*.bin`"
PATH2="`find $AA/dir2/images/dir/ -name *bimage2*.bin`"
PATH3="`find $AA/dir2/images/dir/ -name *cimage3*.bin`"
if [ $CC = "n" ] ; then
PATH=$PATH1
elif [ $CC = "k" ] ; then
PATH=$PATH2
else
PATH=$PATH3
fi
#Getting filename name from path:
IMG="`ls $PATH | cut -d "/" -f6`"
OUTPUT:
/users/prasapat/bin/sl5: line 22: ls: command not found
/users/prasapat/bin/sl5: line 22: cut: command not found
如果我为 ls 和 cut 提供完整路径,它们会起作用。但我不想对脚本中的所有命令都这样做。如果我删除最后一行并回显 PATH 变量,那就完全没问题了。只有在添加最后一个命令后,我才看到问题。
我做错什么了?
我遇到了这个问题,结果发现使用 Notepad++ 编辑 bash 脚本时添加的是 DOS 行尾而不是 UNIX 行尾。在 Linux 环境中运行该脚本会导致抛出“命令未找到”错误。
通过运行我的脚本来诊断问题,如下所示:
bash -x testscript.sh
这将转储所有编译器输出。抛出的错误消息是:
bash -x testscript.sh
+ $'\r'
: command not found 2:
'estscript.sh: line 3: syntax error near unexpected token `{
我通过将 Notepad++ 中的行尾格式更改为 UNIX 而不是 DOS(通过转到编辑 -> EOL 转换 -> UNIX)解决了该问题。