我有一些命令不作为脚本运行。
它应该创建文件名的项目符号列表,然后按字母顺序对每个文件的列进行排序,抓取第二列及其匹配的第三列,并将它们放入 HTML 标记中。它在大多数情况下运行良好,但无法成功删除 .csv 文件扩展名。
每次我运行脚本时,它都会重复line 10 p: No such file or directory found
返回line 21: /a No such file or directory found
。
sort
更新:我的电脑上似乎出现了错误。我运行了一个简单的 shell 脚本,仅包含排序注释,但出现错误no such file or directory
。我已经在我的sudoers
名单上了,但也许我做错了什么。我不明白为什么有些人评论说运行脚本没有问题。
#!/bin/bash
for file in *.csv; do
name=${file%.csv}
echo "<li><a href='$file'>$file</a></li>" >> final.html
done
for file in *.csv; do
name=${file%.csv}
sort -t"," -k2 "$file" |
awk -vfile="$name" -F"," '
BEGIN {
printf "<h3 id=\"%s\">%s</h3>\n", file, file
printf "<ul class=\"no-bullet\">\n"
}
{
printf "<li>%s (%s)</li>\n", $2, $3
}
END {
printf "</ul>\n"
printf "<p id=\"%s\" class=\"text-smaller block-looser\">[<a href=\"#top\">Return to Top</a>]</p>\n", file
}
' >> final.html
done
当我运行时,bash -x myscript.sh
我注意到它最终开始返回:
BEGIN {
printf "<h3 id=\"%s\">%s</h3>\n", file, file
printf "<ul class=\"no-bullet\">\n"
}
{
+ sort -t, -k2 file.csv
printf "<li>%s (%s)</li>\n", $2, $3
}
END {
printf "</ul>\n"
printf ' 'id="%s"' 'class="text-smaller' 'block-looser"'
myscript.sh: line 9: p: No such file or directory
+ href='"#top"'
+ to Top
myscript.sh: line 21: /a: No such file or directory
我不明白在 shell 中运行它与在脚本中运行它之间有什么差异,特别是当我在与 .csv 文件相同的目录中运行它时。将命令粘贴到命令行中时,不会出现这些问题。
更新:使用目录运行代码只会使第一个 for 循环运行,但在第二个循环中仍然存在问题。
我不小心写下了第 10 行和第 22 行,而不是第 10 行和第 21 行,并更新了帖子以反映这一点。尝试调试/解析正在发生的事情时,可能在某处有额外的一行。
以下是我尝试使用此 shell 脚本运行的示例 .csv 文件。
通讯录.csv
ID,Name,State
1,John,NY
2,Rachel,SC
此代码的预期输出:
<li><a href='Contacts'> Contacts</a></li>
<h3 id='Contacts'> Contacts </h3>
<ul class="no-bullet">
<li>John (NY) </li>
<li>Rachel (SC) </li>
</ul>
<p id='Contacts' class="text-smaller">[<a href="#top">Return to top</a>]</p>
我也尝试过使用printf "<p
,但printf '<p
没有效果。
第二次更新:即使从这篇文章粘贴,脚本仍然无法按预期运行。我更新了自制程序并尝试了不同的机器,但没有运气。可能是怎么回事???
答案1
您只有文件名。这意味着脚本正在“当前目录”(您进入的目录)中查找文件cd
。它与您要使用的文件在同一目录吗?
使用绝对文件名:/somedir/someotherdir/filename
- 这样您将始终在已知位置查找文件。
答案2
只有两种方法可以导致您的问题中给出的问题描述。
- 您编辑了脚本当它正在执行时。解决方案:不要这样做
- 文件系统损坏意味着您的脚本文件受到其他编写者的影响。解决方案:强制进行文件系统检查