我以某种方式收到此错误..我自己仍然无法弄清楚:
这是我的脚本:
#!/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
这里,$2
是myecho
,$3
是,echo.in
是。因此,您正在运行的是:$1
file.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
)。