한 줄의 명령 출력을 다른 명령으로 전달합니다.

한 줄의 명령 출력을 다른 명령으로 전달합니다.

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 -xvecho활성화

$ 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

관련 정보