这是什么 shell 语法?

2017-06-21 15:37:03 +08:00
 workwonder

针对某些程序(比如 proxychains )的文件参数仅支持传入文件名(-f config_file),也没有读标准输入的方式,我想实现直接在命令行写 inline 的配置文件,应该怎么搞呢。根据我的经验,胡乱试了下,写出了这样的语法:

$ echo <(<<<"hello world")
/proc/self/fd/11

$ ls -l <(<<<"hello world")
lr-x------ 1 wonder wonder 64 6 月  21 15:23 /proc/self/fd/11 -> pipe:[71926512]

$ cat <(<<<"hello world") 
hello world

我的实际目标是通过命令行动态设置 proxychains 所用的代理,而不用写多个配置文件,由于上面那种搞法似乎不能断行,我最终这么写的:

proxychains4 -f <(/bin/echo -e "[ProxyList]\nsocks5 127.0.0.1 1082") ssh ubuntu@my-cloud-host

不知道这种语法怎么称呼,哪里有参考呢?

2045 次点击
所在节点   Bash
11 条回复
Jaylee
2017-06-21 15:42:26 +08:00
不就一个重定向么?
workwonder
2017-06-21 15:50:58 +08:00
@Jaylee 不是传统那种,还搞了临时的匿名文件。
introom
2017-06-21 15:51:29 +08:00
@Jaylee 不是,,,,
introom
2017-06-21 15:53:34 +08:00
process substitution 还是什么,我也忘了具体名字。bash 的 manpage 一共才 4000 多行,在 expansion 那块找找,很快就能找到。
jkeylu
2017-06-21 15:55:37 +08:00
workwonder
2017-06-21 16:06:47 +08:00
我需要根据访问的目标环境使用不同的代理,使用 proxychains 非要搞一个配置文件,好烦。根据上面的写法,我写了一个小脚本,没那么痛苦了: https://gist.github.com/wonderbeyond/6ef3cdc191490e02a6b12162deab4fd7
workwonder
2017-06-21 16:10:32 +08:00
@introom 以前知道三个小于号 `<<<` 是把 HERE 文档变成前面命令的标准输入,原来还可以跟 `<()` 结合在一起,文档里面都没有这样的用例。
araraloren
2017-06-21 16:13:13 +08:00
mark
之前遇到过,把这东西忘了~~
Jaylee
2017-06-21 20:36:32 +08:00
@workwonder 涨姿势了 居然还有这种操作
mononite
2017-06-22 09:54:29 +08:00
<() process substitution
<<< here string
quinoa42
2017-06-22 15:13:55 +08:00
查了一下,herestring (或者 heredoc 以及其他 redirection )和 process substitution 直接结合在一起的用法实际上是 zsh 支持的功能(至少 bash 4.2.46 是不支持的):
http://zsh.sourceforge.net/Doc/Release/Redirection.html#Redirections-with-no-command
> ...if the parameter NULLCMD is set, its value will be used as a command with the given redirections. ...The default for NULLCMD is ‘ cat ’...
所以 `<<<"hello"` 默认等价于 `cat <<< "hello"`,因此 `cat <(<<<"hello")` 会输出 `hello`。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370077

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX