>> 或双尖括号是什么意思?

>> 或双尖括号是什么意思?

这看起来像是一个很简单的问题,但我找不到任何相关的资源

在 C/C++ 中,它的意思是将从命令提示符中读取的值存储在变量中,

在 Shell 编程中怎么样?

答案1

>>可用于将输出传输到文本文件中,并将其附加到该文件中的任何现有文本。

‘任何命令’>>文本文件.txt

将“任何命令”的输出附加到文本文件。

使用>将会覆盖。

答案2

右尖括号 (>) 用于将输出重定向到磁盘文件。如果指定的文件尚不存在,则创建该文件;如果该文件已存在,则覆盖该文件。左尖括号 (<) 用于将输入从磁盘文件重定向。要将输出附加到现有文件,请使用双右尖括号 (>>)

答案3

>>>是 FD(文件描述符)的重定向操作符

在 bash 中,有三个标准 FD,分别是标准输入 (strin)、标准输出 (strout) 和标准错误 (strerr)。它们也可以分别由 FD 0、FD 1 和 FD 2 调用。

正常情况下,您会让所有 FD 指向终端,但这可以通过使用重定向来改变。

例如,如果你调用:

command > log.txt

您将把输出重定向到文件 log.txt 这类似于调用:

command 1> log.txt

由于这只会重定向 strout,因此您仍然能够在终端中看到错误。为了将 strerr 重定向到您的 log.txt 文件,您必须运行:

command 2> log.txt

再次强调,这只会重定向 strerr。如果您希望重定向 stdout 和 stderr,则需要使用命令将 stderr 输出复制到 stdout >&

command 1> log.txt 2>&1

要理解此命令,您需要从右到左阅读它,首先将 stderr 复制到 stdout,然后将 strout 重定向到 log.txt 文件。

当您以这种方式使用重定向时,bash 将不会查看文件是否存在,而只是创建一个文件,而不管这是否意味着删除现有文件。如果您想避免丢失日志文件中已经写入的内容,则可以>>按照上述相同的方式使用该命令,但在这种情况下,所有输出都将附加到现有文件中。

对于它们在 C++ 中与 cin、cout 和 cerr 的使用,我认为 hash 给出了比我更好的答案。

我不是这方面的专家,所以我可能有些地方弄错了。如需更完整的信息,我建议阅读Greg's Wiki 上的 Bash 指南

答案4

在 shell 脚本中,>操作员将创建一个文件,您将该文件放入其中,并将删除文件中的所有内容(如果存在),但会将>>文本附加到正确的文件中,最好>>用于写入日志文件。比如您想添加时间、计数或一些流程日志并>创建新文件,请尝试以下操作:

  #!/bin/bash
  nowt=$(date +"%T")
  date1=$(date +"%s")
  NOW=$(date +"%d-%m-%Y")
  now=$NOW" "$nowt
  file_name=$NOW"_"$nowt".log"
  echo "START TIME WAS :$now " | cat > /home/user/Desktop/$file_name
  sh some_sh_file you want to run  2>&1 | tee >> /home/user/Desktop/$file_name #want to log the out put
  nowt=$(date +"%T")
  date2=$(date +"%s")
  NOW=$(date +"%d-%m-%Y")
  now=$NOW" "$NOW
  diff=$(($date2-$date1))
  echo "$(($diff / 60)) minutes and $(($diff % 60)) seconds elapsed."
  echo "END TIME WAS :$now" | cat >> /home/user/Desktop/$file_name
  echo "$(($diff / 60)) minutes and $(($diff % 60)) seconds elapsed." | cat >> /home/user/Desktop/$file_name  

相关内容