问题描述
这似乎是一个简单的问题,但我找不到任何相关资源
在 C/C++ 中,这意味着将读取的值存储在命令提示符中并将其存储在变量中,
在 Shell 编程中怎么样?
最佳答案
>>
可用于将输出通过管道传输到文本文件,并将附加到该文件中的任何现有文本。
‘any command’ >>
文本文件.txt
将 ‘any command’ 的输出附加到文本文件。
使用 >
将覆盖。
次佳答案
右尖括号符号 (>) 用于将输出重定向到磁盘文件。如果指定的文件不存在,则创建它;如果它确实存在,它将被覆盖。左尖括号符号 (<) 用于重定向来自磁盘文件的输入。要将输出附加到现有文件,请使用双右尖括号 (>>)
第三种答案
>
和 >>
是 FD(文件描述符)的重定向运算符
在 bash 中,你有树标准 FD,它们是标准输入 (strin)、标准输出 (strout) 和标准错误 (strerr)。这些也可以分别由 FD 0、FD 1 和 FD 2 调用。
通常你会让所有 FD 指向终端,但这可以通过使用重定向来改变。
例如,如果您调用:
command > log.txt
您会将输出重定向到文件 log.txt\n这类似于调用:
command 1> log.txt
由于这只会重定向 strout,您仍然可以在终端中看到错误。\n为了将 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 给出了比我更好的答案。
我不是这些方面的专家,所以我可能弄错了一些东西。如需更完整的信息,我建议阅读 Bash guide on Greg’s Wiki
第四种答案
在 C/C++ 中:
在 C/C++ 中,左移和右移运算符使用符号 <<
和 >>
作为按位运算符;对位执行移位操作。 C++ 还在基本的输入/输出操作中使用重载的移位运算符; C++ 中的 >>
和 <<
括号用于将数据/信息提取和插入到可能是标准输入/输出、文件的流中。
在 Shell 脚本/编程中:
在 Shell 脚本/编程中,与上面提到的提取/插入操作没有太大区别,>>
/<<
(>
/<
运算符的变体)用于将标准流从/重定向到用户定义的流并执行附加(不同于>
/<
覆盖)操作。
参考:
您可能有兴趣阅读:
-
为什么 cout 和 cin 使用位移位(
<<
和>>
)?