如果文件不存在,则不执行tee操作

4
我尝试将echo命令保存到日志文件中:
echo "XXXXX" | tee -a ./directory_with_logs/my_script.log

当 my_script.log 文件存在时,它能够正常运行。

XXXXX

(XXXXX也被写入到了my_script.log中)

当my_script.log不存在时,我会得到类似于这样的结果

tee: ./directory_with_logs/my_script.log: No such file or directory
XXXXX

我尝试使用if else程序来检查文件是否存在,并将结果写入日志。

function saveLog(){ 
if [[ -e "./directory_with_logs/my_script.log" ]] ; then 
tee -a ./directory_with_logs/my_script.log 
fi ; } 
echo "XXXXX" | saveLog

但当文件不存在时,它的工作方式也是错误的,xterm 中什么也不会发生,没有 echo 命令。

如何在 xterm 中打印并写入日志文件的 echo 命令,

或者只有在日志文件不存在时才在 xterm 中打印?

请帮忙 :)


1
问题是文件不存在还是目录不存在呢?因为这两者并不相同。tee 命令可以很好地创建文件,但它却不能创建目录。 - Etan Reisner
2
这就是所有的内容。此外,相关联的使用tee命令将输出重定向到不存在的目录中的文件 - fedorqui
另外,为什么不能只是简单地执行 echo "XXXXXX" >> ./directory_with_logs/my_script.log 呢?为什么要使用 tee - twalberg
2个回答

3

你的代码无法运行的原因是,当文件不存在时,它不会读取标准输入。你可以通过在else分支中添加一个cat调用来解决这个问题,代码如下:

saveLog() { 
  if [[ -e "./directory_with_logs/my_script.log" ]] ; then 
    tee -a ./directory_with_logs/my_script.log 
  else
    cat
  fi 
}

-5

你不需要使用 tee 命令来追加文件,这就是 >> 的作用。

试试这个:

echo "XXXXX" >> ./directory_with_logs/my_script.log

6
他可能使用tee -a因为他想要看到输出结果,同时也想追加到文件中。 - user000001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接