Linux 中的输入重定向符号:<、<< 和 <<< 的解释与用法

Linux 中的输入重定向符号:<、<< 和 <<< 的解释与用法

在Linux中,<、<< 和 <<< 是三种不同的输入重定向符号,它们分别有不同的用途

<(单小于号)

这是最基础的输入重定向符号,用于将文件内容作为命令的标准输入。例如:

command < input_file

在这个例子中,command 命令会从 input_file 中读取数据,而不是从键盘接收输入。

<<(双小于号,后跟分界符)

这种形式被称为“Here Documents”,它允许你直接在命令行或脚本中定义一大段文本,然后将其作为命令的标准输入。分界符可以是任意不包含空格的字符串,通常是一个单词或者一对引号。以下是一个示例:

command << "EOF"
Here is some text to be passed as input.
It can span multiple lines.
EOF
# 编译一个docker镜像,不写Dockerfile文件,直接从重定向流获取
docker build -t example.com/iximiuz/test:latest - << EOF
FROM busybox:latest
CMD echo just a test
EOF

# 输入的多行信息,保存到default.conf
cat << EOF > default.conf
key=value
EOF

# 另外一种写法,输入的多行信息,保存到default.conf
cat  << EOF | tee default.conf
character=utf8
EOF

当shell执行到 << "EOF" 时,它会开始读取下一行直到遇到指定的结束标记(这里是 “EOF”),并将这些内容作为一个整体传递给 command

注意事项

<< 后面跟的分隔符加双引号和不加双引号的区别在于是否允许内部的shell扩展:

  1. 不加双引号
command << delimiter
unquoted content here
$variable_expansion
$(command_substitution)
delimiter

在这种情况下,Here Document 内部的内容会经过 shell 解析,这意味着变量扩展 ( v a r i a b l e e x p a n s i o n ) 、命令替换 ( variable_expansion)、命令替换 ( variableexpansion)、命令替换((command_substitution)) 等会被执行。

  1. 加双引号:
command << "delimiter"
quoted content here
$variable_expansion
$(command_substitution)
delimiter   

当分隔符用双引号包围时,Here Document 内部的内容将被视为字面值,即除了换行符之外,所有的内容都将被原样传递给命令,包括 $variable_expansion 和 $(command_substitution),它们不会被 shell 解释执行。

<<<(三小于号)

这是所谓的“Here Strings”机制,在Bash和其他一些Shell中可用。它用来将一个字符串直接传送给命令作为标准输入,而不需要创建临时文件。

command <<< "This string becomes stdin"

在这里,command 将接收到字符串 “This string becomes stdin” 作为其输入,而不必从文件或其他I/O流中读取。

总结

总结起来,这三个符号都是为了改变命令默认的输入来源,但它们各自以不同方式提供了灵活性和便利性,适应不同的输入重定向场景。欢迎关注我的公众号鲁班曰

参考文献

不为人知的linux技巧:掌握 <、<< 和 <<< 带来的奇妙功能

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux shell 重定向是一种重要的命令行技术,它可以将一个命令的输出流或错误流重定向到指定的文件或命令,也可以将一个文件的内容输入到一个命令。 以下是一些常见的重定向符号: 1. '>' :将命令的输出流重定向到指定文件,如果该文件已经存在,则会覆盖该文件的内容;如果该文件不存在,则会创建该文件。 例如,将 ls 命令的输出重定向到文件 list.txt : ``` ls > list.txt ``` 2. '>>' :将命令的输出流添加到指定文件的末尾,如果该文件不存在,则会创建该文件。 例如,将 ls 命令的输出添加到文件 list.txt 的末尾: ``` ls >> list.txt ``` 3. '<' :将文件内容作为命令的输入流。 例如,将文件 list.txt 的内容作为 grep 命令的输入流: ``` grep "test" < list.txt ``` 4. '2>' :将命令的错误流重定向到指定文件,如果该文件已经存在,则会覆盖该文件的内容;如果该文件不存在,则会创建该文件。 例如,将 ls 命令的错误流重定向到文件 error.log : ``` ls /wrong/path 2> error.log ``` 5. '&' :将命令的输出流和错误流合并为一个流。 例如,将 ls 命令的输出流和错误流合并为一个流,并将其重定向到文件 output.log : ``` ls /wrong/path &> output.log ``` 以上是一些常见的重定向符号及其用法,它们能够帮助我们在命令行更加灵活地处理输入、输出和错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值