Bash
在一行中將命令的輸出傳遞給另一個
我想用 截屏
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
將使用.png
as 參數的名稱來收縮它並呼叫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