在Unix环境中,我需要将报告写入x_out文件,并且在进程结束时,需要删除该文件。但是,它总是会引发以下错误。
grep: can't open /XYZ/123/Tmp/x_out
rm: /XYZ/123/Tmp/x_out non-existent
但是,我可以在相应的位置找到文件x_out。我也可以打开并查看内容。我发现有时文件名会随着一些'〜'而变化。喜欢附加到它的字符。有办法解决这个问题吗?
编辑:我没有任何'〜'附加到它。但是,我怀疑可能有一些像这样的不可读的聊天记录。
编辑:我在这里添加了实际错误
编辑:我使用的命令 grep" Report_values" $ {REPORTOUT} | cut -d" |" -f 6
rm $ {REPORTOUT}
答案 0 :(得分:1)
嗯,我可以看到两个的可能性。毫无疑问会有更多,但我的头脑不是一个非常大的空间: - )
首先,尽管你的断言,文件并不存在。
第二个是确实存在但你在错误的地方寻找它(例如,你已经改成了不同的目录)。
如果您放置类似于:
的行( pwd ; cd ../.. ; pwd ; ls )
在grep/rm
之前的脚本中,它应该告诉您这两种可能性中的任何一种是否正确。
它将提供您当前的目录,您正在查找该文件的目录以及该目录中的文件。
答案 1 :(得分:1)
只检查文件名中是否有不可打印/图形字符...使用ls的-Q或-q标志来查看它...检查下面它的外观....
来自ls手册页的标志描述
-q, --hide-control-chars
print ? instead of non graphic characters
--show-control-chars
show non graphic characters as-is (default unless program is `ls' and output is a terminal)
-Q, --quote-name
enclose entry names in double quotes
--quoting-style=WORD
use quoting style WORD for entry names: literal, locale, shell, shell-always, c, escape
演示会议
$ ls
demo.txt test.dat
$ ls -1
demo.txt
test.dat
$ cat demo.txt
cat: demo.txt: No such file or directory
$ rm demo.txt
rm: cannot remove `demo.txt': No such file or directory
$ ls -Q
"demo.txt " "test.dat"
$ ls -1Q
"demo.txt "
"test.dat"
$ rm "demo.txt "
$