命令未找到bash脚本中的错误

时间:2011-04-12 22:48:08

标签: bash

我写了一个bash脚本。它基本上根据输入参数获取三个路径,然后获取路径中的imagename / filename。

类似的东西:
我提供:

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提供完整的路径并切断它们的工作。但我不想为脚本中的所有命令执行此操作。如果我删除最后一行并回显PATH变量,那就完全没问题了。只有在添加了最后一个命令后,才会看到问题 如果我做了任何明显的错误,请帮助并告诉我。

6 个答案:

答案 0 :(得分:14)

问题在于,如果在调用时没有使用完整路径,则重新定义bash查找的PATH变量以查找二进制文件。

你应该将bash脚本中的PATH更改为MYPATH或类似的东西,这样它就不会破坏已经存在的环境变量。

如果您不知道PATH变量的用途,可以查看wikipedia's article

答案 1 :(得分:2)

$PATH变量是一个特殊的环境变量,它包含一个目录列表,当你键入命令时,你的shell(在本例中为bash)应该会查看(例如find和{{ 1}}。)只需在脚本或shell中尝试ls即可了解它的外观(通常会有echo $PATH/bin/usr/bin在那里列出,也许更多。)

由于您不需要在此特定脚本中重新定义此变量,因此您应使用除/usr/local/bin之外的其他名称。

答案 2 :(得分:1)

$PATH是一个预定义变量,它在查找可执行文件时提供搜索目录。为您的脚本选择一个不同的变量名称,你会没事的。

答案 3 :(得分:0)

使用与PATH不同的变量名称。 $PATH是环境变量,它告诉您的shell在哪里查找可执行文件(例如,您可以运行ls而不是/bin/ls)。

答案 4 :(得分:0)

您正在使用特殊的PATH并用于查找命令,这就是无法解析ls的原因。使用PATH

以外的任何名称
if [ $CC = "n" ] ; then  
    MY_PATH=$PATH1  
elif [ $CC = "k" ] ; then  
    MY_PATH=$PATH2  
else  
    MY_PATH=$PATH3  
fi 

export MY_PATH

IMG="`ls $MY_PATH | cut -d "/" -f6`"

答案 5 :(得分:0)

我有这个问题,结果是使用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。