![내장된 읽기에 대해 알아보기](https://linux55.com/image/92483/%EB%82%B4%EC%9E%A5%EB%90%9C%20%EC%9D%BD%EA%B8%B0%EC%97%90%20%EB%8C%80%ED%95%B4%20%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0.png)
urxvt를 사용하여 명령을 실행하는 간단한 쉘 스크립트를 작성하려고 합니다. 아이디어는 다음과 같습니다(전체 스크립트가 아니라 아이디어만).
PRMPT="read -r CMD"
urxvt -g 55x6-20+20 -e $PRMPT
CMD
이 스크립트에는 두 가지 문제가 있습니다. 첫 번째는 read
명령의 옵션을 무시하기 때문에 이런 종류의 작업에 적합하지 않습니다(read라고 쓰면 할당 되고 무시 echo hello
됩니다 ). 두 번째이자 나를 가장 혼란스럽게 하는 것은 내 입력을 기다리지 않고 즉시 종료하는 것입니다. 나는 이것이 내장 함수와 관련이 있다고 생각 하지만, 예를 들어 그것은 잘 작동합니다.echo
CMD
hello
urxvt -e
read
urxvt -e echo hello
스크립트를 변경하는 방법에 대한 제안 사항이 있는 사람이 있습니까?
답변1
당신의 목표는 무엇입니까? echo는 실행 가능 /bin/echo
하고( ) 읽기는 내장되어 있습니다. -e는 실행 파일을 실행한다는 의미입니다. 쉘의 내장 기능(bash?)을 사용하려면 다음을 사용하십시오.urxvt -e /bin/bash -c read -r CMD
답변2
모르겠어요 urxvt
. 하지만 제가 도와드릴 수 있어요 read
.
이 방법을 사용하는 경우 read
:
read -r CMD
첫 번째 할당토큰변수를 읽습니다 CMD
. 더 많은 태그를 읽으려면 더 많은 변수를 명시적으로 선언할 수 있습니다.
read -r CMD ARGS1 ARG2 ARG3
이 경우 할당해야 하는 변수 수보다 많은 태그가 있는 경우 마지막 변수는 직관적으로 읽어야 하는 값과 나머지 태그를 읽은 값을 모두 가져옵니다.
옵션을 추가하여 배열을 사용할 수도 있습니다 -a
.
read -ra CMD
배열을 확장하려면 다음을 수행하십시오.
"${CMD[@]}"
삽화.
$ read -a cmd
echo ok
$ ${cmd[@]}
ok