Bash

在一行中將命令的輸出傳遞給另一個

  • July 16, 2017

我想用 截屏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

似乎我只能將一個鍵綁定到一個只能放在一行中的命令,這就是需要單行的原因。

您始終可以按照其他答案的建議使用命令替換,或者使用xargs管道提供的內容:

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

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

因為import將使用.pngas 參數的名稱來收縮它並呼叫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

引用自:https://unix.stackexchange.com/questions/378802