Linux Bash - 调用函数返回“没有这样的文件或目录”错误

问题描述 投票:0回答:1

我正在 Bash 中制作一个小程序,它可以通过 3 种方式查找网站的 IP 地址。除了第三种方法之外,其他方法都有效:

用户将文件名作为第一个参数传递到代码中 - 在本例中,文件为“domains.txt”并包含 3 个测试域。

编辑2:我添加了一个更简洁的代码,只会产生错误。对帖子进行了一些编辑以反映这一变化。旧代码复制/粘贴已删除。

#!/bin/bash
function Domain_Lookup_Func {
filename=$1
while read -r line
do
echo "$line" | nslookup
done < "$filename"
}

initialInput=$1
fileChk=".txt"
if [[ $initialInput == *"$fileChk"* ]]; then
Domain_Lookup_Func
fi

这是大学的代码练习,特别是这是我第一次使用 Bash,所以我知道这是一些令人痛苦的基本代码。不过,我确实有编码经验,所以我不会失去技术解释(希望如此)。

我花了几个小时试图解决这个问题,并且尝试了数十种不同的方法来检查子字符串 - 没有任何效果,并且我发现与此问题相关的其他问题要么有不起作用的解决方案,要么没有。 t 在相同的上下文中,因此答案不相关。除了单个子字符串检查之外,该代码的所有其他部分都可以完美运行 - 包括 while 循环。

我发现一些信息表明,如果我使用“bash(文件名).sh”在终端中打开代码,或者在代码顶部使用“#!/bin/bash”,代码的解释会有所不同。这可能是问题所在,但说实话,我不知道这对我的代码意味着什么。

linux bash
1个回答
0
投票

@oguzismail 在他们的评论中有正确的答案,但我想建议你将来可以做一些事情来调试此类事情。如果您在启用跟踪的情况下运行脚本 (

-x
),您将看到:

$ bash -x thescript.sh hostnames.txt
+ initialInput=hostnames.txt
+ fileChk=.txt
+ [[ names.txt == *.txt* ]]
+ Domain_Lookup_Func
+ filename=
lookup.sh: line 3: : No such file or directory

这清楚地表明函数内部的

$1
正在计算空字符串。事实上,错误消息已经提供了这一线索;如果您尝试从不存在的文件重定向输入,bash 会在错误中包含文件名:

$ cat < filethatdoesnotexist.txt
-bash: filethatdoesnotexist.txt: No such file or directory

在您看到的错误消息中,通常由文件名占据的位置是空白的,这就是您看到

line 3: : ...
的原因。

© www.soinside.com 2019 - 2024. All rights reserved.