st(간단 터미널)에 전달된 -e 플래그를 사용하여 세미콜론으로 구분된 명령을 실행합니다.

st(간단 터미널)에 전달된 -e 플래그를 사용하여 세미콜론으로 구분된 명령을 실행합니다.

노트: st내 질문에 있는 터미널 에뮬레이터의 실제 이름은 무엇입니까?https://st.suckless.org/.


누르면 팝업되어 클립보드에 있는 단어의 번역이 표시되는 바로가기를 만들고 싶습니다.

사용해 보았지만 다음 오류와 함께 즉시 종료되었습니다.

$ st -e "trans $(xclip -o) -t en; read"`
child finished with error '256'

xterm그러나 기대 에도 동일하게 적용됩니다 .

$ xterm -e "trans $(xclip -o) -t en; read"

st에 대한 옵션 으로 하나의 명령만 사용 -e하지만 터미널이 즉시 닫히지 않도록 trans 후에 읽기 또는 이와 유사한 작업을 수행해야 합니다.

이게 st의 잘못인가요, 아니면 제가 뭔가 잘못하고 있는 건가요?

답변1

-e옵션은 호환성 메커니즘입니다.간단한 터미널. (유무에 관계없이) 전달하는 명령과 인수는 -e간단한 터미널 포크를 통해 직접 실행됩니다.execvp()하위 프로세스에서 실행 중주어진 명령과 매개변수가 정확히 일치합니다. 쉘이 포함되지 않으며 전달된 매개변수는 st그대로 대상 프로그램에 전송됩니다.

당신은 모든 것을 논쟁으로 넘겼습니다. 이러한 간단한 터미널은 실제로 말 그대로 이름이 지정된 명령을 실행하려고 합니다 trans $(xclip -o) -t en; read(작은따옴표가 사용된 경우 또는 큰따옴표가 사용된 경우 확장 결과에 의해 수정됨). 분명히 그런 이름의 명령이 없습니다.

셸 명령줄(여기서는 확장, 셸 내장 및 셸 명령 구문 등)을 사용하려면 셸을 명시적으로 호출하여 이를 이해해야 합니다.

st -e sh -c 'trans "$(xclip -o)" -t en; read'

그러면 명령이 포함된 짧은 쉘 스크립트를 실행하는 쉘이 st시작 됩니다.sh

답변2

매뉴얼 페이지를 확인하십시오 st.

st [-aiv] [-c class] [-f font] [-g geometry] [-n name] [-o iofile] [-T title] 
[-t title] [-l line] [-w windowid] [[-e] command [arguments...]]


-e command [ arguments ... ]
      st executes command instead of the shell.  If this is used it must be 
      the last option on the command line, as in xterm / rxvt. This option 
      is only intended for compatibility, and all the remaining arguments 
      are used as a command even without it.

나는 이 스위치가 단일 명령을 실행하기 위한 것이며 수행하려는 작업만큼 복잡하지 않다는 @Kusalananda의 의견에 동의합니다.

따라서 이를 수행하려면 쉘을 인수로 전달한 -e다음 st명령을 보조 인수 세트로 더 강력한 쉘에 전달해야 합니다.

$ st <other args> -e sh -c '....'
$ st <other args> -e bash -c '....'

인용하다

관련 정보