错误:找不到命令

错误:找不到命令

我以某种方式收到此错误..我自己仍然无法弄清楚:

这是我的脚本:

#!/bin/bash
if (( $# != 4 )); then 
    echo wrong parametrs
    echo 1
fi
if [[ ! -f $2 ]];then
    echo file 2 doesnt exist
    exit 1;
fi

$2 < $3 > $1 #line 11
if  diff $4 $1 > /dev/null; then
    echo InOut V
    exit 0
else
    echo InOut X
    exit 1
fi

我尝试像这样运行它:

./test file.log myecho echo.in echo.out

它说:line 11: command: myecho : not found

答案1

我不明白你想在这里做什么,但问题是你试图myecho作为程序执行。我们来看看相关的行:

$2 < $3 > $1

这里,$2myecho$3是,echo.in是。因此,您正在运行的是:$1file.log

myecho < echo.in > file.log

根据脚本的输出,您myecho在当前目录中调用了一个文件(否则脚本会抱怨文件 2 不存在)。但是,您当前的目录显然不在您的目录中$PATH。因此,当您尝试执行 时myecho,系统会在您的目录中搜索该名称的可执行文件$PATH,但找不到并抱怨。

最简单的解决方案是调用./$2而不是$2告诉你的 shell 执行myecho当前目录中调用的文件,而不是在$PATH.

或者,您可以将当前目录添加到您的$PATH.将此行添加到您的~/.profile

PATH="$PATH:"

尾随:将您当前的目录(无论是什么)添加到您的$PATH.您必须注销并重新登录或手动获取.profile( . ~/.profile) 才能使更改生效。请注意,在某些情况下,这可能很危险,例如,攻击者将恶意可执行文件上传到您的当前目录并将其命名为ls.

答案2

在第 11 行中,您正在运行命令$2
$2计算结果为给定脚本的第二个参数,这就是myecho您的情况。

从错误消息中您可以看出您的 shell 找不到名为 的命令myecho。它可能未安装,或者在像这样的自定义命令的情况下,它可能位于错误的目录中(在 中的目录之外$PATH),或者只是未标记为可执行文件 ( chmod +x)。

相关内容