Com*_*erd 32 command-line bash scripts
这似乎是一个如此简单的问题,但我找不到任何关于它的资源
在 C/C++ 中,这意味着将读取的内容存储在命令提示符中的值中并将其存储在变量中,
在Shell编程中怎么样?
Ant*_*lis 58
>> 可用于将输出通过管道传输到文本文件中,并将附加到该文件中的任何现有文本。
'任何命令' >>textfile.txt
将“任何命令”的输出附加到文本文件。
使用>会覆盖。
Bra*_*ask 12
右尖括号符号 (>) 用于将输出重定向到磁盘文件。如果指定的文件不存在,则创建;如果确实存在,则会被覆盖。左尖括号符号 (<) 用于重定向来自磁盘文件的输入。要将输出附加到现有文件,请使用双尖括号 (>>)
该>和>>是重定向运营商FD的(文件描述符)
在 bash 中,您有树标准 FD,它们是标准输入 (strin)、标准输出 (strout) 和标准错误 (strerr)。这些也可以分别由 FD 0、FD 1 和 FD 2 调用。
通常,您会让所有 FD 指向终端,但这可以通过使用重定向来更改。
例如,如果您调用:
command > log.txt
Run Code Online (Sandbox Code Playgroud)
您将输出重定向到文件 log.txt 这类似于调用:
command 1> log.txt
Run Code Online (Sandbox Code Playgroud)
由于这只会重定向 strout,您仍然可以在终端中看到错误。为了将 strerr 重定向到您的 log.txt 文件,您必须运行:
command 2> log.txt
Run Code Online (Sandbox Code Playgroud)
同样,这只会重定向 strerr。如果您希望重定向 stdout 和 stderr,您需要使用>&命令将 stderr 输出复制到 stdout 。
command 1> log.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
要理解此命令,您需要从右到左阅读它,首先将 stderr 的副本复制到 stdout,然后将 strout 重定向到 log.txt 文件。
当您以这种方式使用重定向时,bash 不会查看文件是否存在,而只会创建一个,而不管这是否意味着删除现有文件。如果您想避免丢失已写入日志文件的内容,您可以>>按照与上述相同的方式使用该命令,但在这种情况下,所有输出都将附加到现有文件中。
对于它们在 C++ 中与 cin、cout 和 cerr 的使用,我认为 hash 给出了比我更好的答案。
我不是这些方面的专家,所以我可能搞错了一些事情。有关更完整的信息,我建议阅读Greg's Wiki 上的 Bash 指南
在 C/C++ 中,左移和右移运算符使用符号<<和>>作为按位运算符;对位执行移位操作。C++ 还在基本的输入/输出操作中使用了重载的按位移位运算符;C++ 中的括号>>和<<括号用于将数据/信息提取和插入到流中,这些流可以是标准输入/输出文件。
在 Shell Scripting/Programming 中,与上面提到的提取/插入操作没有太大区别,>>/ << (>/<运算符的变体)用于将标准流从 /重定向到用户定义的流并执行附加(不同于>/<覆盖)操作。