8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Bash 脚本中出现“未找到命令”错误

HoangIta 2月前

51 0

我编写了一个 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 变量,那就完全没问题了。只有在添加最后一个命令后,我才看到问题。

我做错什么了?

帖子版权声明 1、本帖标题:在 Bash 脚本中出现“未找到命令”错误
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由HoangIta在本站《bash》版块原创发布, 转载请注明出处!
最新回复 (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`"
    
  • 使用与 PATH . $PATH 环境变量不同的变量名来告诉您的 shell 在哪里寻找可执行文件(例如,您可以运行 ls 而不是 /bin/ls )。

  • $PATH 是一个预定义变量,它给出了查找可执行文件时要搜索的目录。为你的脚本选择一个不同的变量名就可以了。

  • $PATH 是一个特殊的环境变量,它包含一个目录列表,当您键入命令(例如 find ls )时,您的 shell(在本例中为 bash)应该查看这些目录。只需 echo $PATH 在脚本或 shell 中尝试一下,就能了解它是什么样子的(您通常会 /bin , /usr/bin /usr/local/bin ,甚至更多。)

    由于您实际上不需要在此特定脚本中重新定义此变量,因此您应该使用其他名称 $PATH .

  • 这也是常见的常见问题,但与此处的问题不同。有关更详细的内容,请参阅 .com/questions/39527571/…

  • 我遇到了这个问题,结果发现使用 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)解决了该问题。

  • 更好的解决方案是永远不要对任何私有变量使用大写字母。大写字母是为系统变量保留的;使用小写字母可确保您不会意外地用您尝试的下一个变量名破坏其他系统变量。另请参阅 .com/questions/673055/…

  • 问题是,如果您在调用时没有使用完整路径,那么您就重新定义了 PATH 变量,bash 会在其中查找二进制文件。

    您应该将 bash 脚本中的 PATH 更改为 MYPATH 或类似的内容,这样它就不会干扰现有的环境变量。

    如果你不知道 PATH 变量的用途,可以查看 维基百科的文章

返回
作者最近主题: