![>> 或双尖括号是什么意思?](https://linux22.com/image/971446/%3E%3E%20%E6%88%96%E5%8F%8C%E5%B0%96%E6%8B%AC%E5%8F%B7%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
这看起来像是一个很简单的问题,但我找不到任何相关的资源
在 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