인쇄할 수 없는 문자가 필요한 프로그램이 있습니다.0x0F( ctrl+ o)는 프로그램의 의도된 부분을 실행하기 위한 입력입니다.
0 000 00 NUL � Null char
1 001 01 SOH  Start of Heading
2 002 02 STX  Start of Text
3 003 03 ETX  End of Text
4 004 04 EOT  End of
명령줄에서 실행됩니다. 인쇄할 수 없는 문자를 프로그램 입력으로 명령줄에 삽입하는 방법을 아시나요?
답변1
이 printf
유틸리티는 8진 문자 이스케이프를 지원합니다.
- XBD 파일 형식 표기법(
'\\'
,'\a'
,'\b'
,'\f'
,'\n'
,'\r'
,'\t'
)'\v'
에 표시된 이스케이프 시퀀스"\ddd"
외에도디디8진수로 지정된 값으로 바이트를 써야 하는 1자리, 2자리 또는 3자리 8진수입니다.
printf
최소한 Bash와 Zsh의 내장 기능은 16진수 이스케이프 시퀀스 \xHH
와 $'...'
유사한 방식으로 이스케이프 시퀀스를 삽입하는 따옴표도 지원합니다.
따라서 특정 명령의 명령줄 인수에 이러한 문자를 사용하려면 다음을 수행하십시오.
$ somecmd "arg_with_$(printf '\017')_xoff"
또는 해당 문자를 여러 번 사용해야 하는 경우 변수에 넣으세요.
$ xoff=$(printf '\017')
$ somecmd "many${xoff}odd${xoff}chars"
또는 주석에 언급된 명령에 2바이트 0x0f 0x11
( 8진수)를 전송합니다.017 021
$ printf "\x0f\x11" | somecmd...
$ printf "\017\021" | somecmd...
답변2
$\NNN
이는 ZSH가 제공하는 형식 에 따라 다릅니다.
% perl -e 'printf "%vx\n", shift' $'\177'
7f
%
두 가지 옵션 중 zsh
또 다른 ksh
옵션은 a를 사용한 control+v다음 명령줄에 삽입하는 return것입니다 . 하지만 이는 지루할 수 있고 쉘 기록을 지나치게 복잡하게 만들 수 있습니다.^M
이것이 누락된 경우 또 다른 옵션은 적절한 문자를 내보내는 프로그램을 실행하는 것입니다.
% perl -e 'printf "%vx\n", shift' $( perl -e 'print "\x0F"' )
f
%
또는 귀하의 프로그램에 적합한 매개변수가 있는 작은 C 프로그램을 사용하면 쉘이 추가할 수 있는 합병증을 피할 수 있습니다.
#include <err.h>
#include <unistd.h>
int main(void)
{
execlp("perl", "perl", "-e", "printf \"%vx\\n\", shift", "\x0F",
(char *) 0);
err(1, "exec failed");
return 1;
}
답변3
이 명령이 작업을 수행했습니다.
printf '\x0f\x11' | program