将命令的输出在一行中传递给另一个命令

将命令的输出在一行中传递给另一个命令

我想用 截屏import,并将其保存到名称为当前时间的文件中。

这是我尝试过的:

sunqingyao:~$ date '+screenshot-%y%m%d-%H%M%S.png'
screenshot-170716-173336.png
# OK

sunqingyao:~$ import screenshot-170716-173336.png
sunqingyao:~$ ls -l screenshot-170716-173336.png 
-rw-rw-r-- 1 sunqingyao sunqingyao 250556 Jul 16 17:35 screenshot-170716-173336.png
# OK

sunqingyao:~$ date '+screenshot-%y%m%d-%H%M%S.png' | import
import: missing an image filename `import' @ error/import.c/ImportImageCommand/1293.
# Not OK

出于某种原因,我希望这个命令是一行命令。

背景资料:

实际上我正在尝试绑定一个按键来使用 i3 进行屏幕截图。这是我的相关部分~/.config/i3/config

# Take a screenshot upon pressing $mod+x (select an area)
# https://i3wm.org/docs/userguide.html#keybindings
bindsym --release $mod+x exec --no-startup-id date '+screenshot-%y%m%d-%H%M%S.png' | import

似乎我只能将一个键绑定到只能容纳一行的命令,这就是为什么需要单行的原因。

答案1

您始终可以按照其他答案的建议使用命令替换,或者使用xargs管道给出的内容:

$ date '+screenshot-%y%m%d-%H%M%S.png' | xargs -I {} import  {}                                                              

$ ls screenshot-*                                                                                                            
screenshot-170716-042853.png

答案2

因为import将采用作为参数的名称.png来构造它并调用import.认为首先将$()替换,然后将作为参数传递import

import $(date +'screenshot-%Y%m%d-%H%M%S.png')

例如使用set -xv&echo启用

$ echo $(date +'screenshot-%Y%m%d-%H%M%S.png')
echo $(date +'screenshot-%Y%m%d-%H%M%S.png')
++ date +screenshot-%Y%m%d-%H%M%S.png
+ echo screenshot-20170716-131720.png
screenshot-20170716-131720.png

相关内容