기본적으로 RFC 5322 표준을 사용하여 uucp를 통해 다음을 포함한 일부 특수 계정으로 일부 이메일을 보내려고 합니다 !#$%&'*+-/=?^_`{|}~;
.https://en.wikipedia.org/wiki/Email_address#Local-part)
CLI(/bin/bash) 및 Perl 스크립트를 통해 Centos 6 상자에서 다음 명령을 실행하려고 합니다.
# cat /root/my_msg | uux -r [email protected] - 'my_remailserv!rmoc.pl' [email protected] "CP&[email protected]" [email protected]
이메일 주소를 전달하는 데 성공했지만 문자열을 다음으로 분할했습니다.Massimo.L'[email protected]
"Massimo.L\'[email protected]"
&
CP & [email protected]
이러한 추가 2개의 공백을 피하는 방법에 대한 아이디어가 있습니까? 나는 만족스러운 결과를 얻지 못한 채 이것을 여러 번 시도했습니다."CP\&[email protected]"
'CP\&[email protected]'
답변1
쉘이 탈출해야 하는 것이 무엇인지 추측하는 대신, 쉘을 우회하기 위해 연결된 파이프의 핸들을 사용하십시오 uux
.
open my $uux, '|-', 'uux', '-r',
'[email protected]',
'-',
'my_remailserv!rmoc.pl',
'[email protected]',
'CP&[email protected]',
'[email protected]'
or die $!;
open my $data, '<', '/root/my_msg'
or die $!;
print $uux (<$data>);
close $data
or die $!;
close $uux
or die $!;
(예제에서 복사한) 정적 문자열을 해당 perl 변수로 바꿀 수 있습니다. 여기서 기본 아이디어는 프로그램의 파이프 핸들을 열고 uux
(원하는 모든 매개변수 제공) 메시지 내용에 대한 두 번째 핸들을 연 다음 두 번째 파일 핸들의 내용을 파이프에 인쇄하고 모든 것을 닫는 것입니다. .
이를 독립적으로 테스트하기 위해 로컬 "uux" 프로그램을 만들었습니다.
#!/bin/sh
echo I am "$0" with arguments:
printf '<%s>\n' "$@"
echo Here is stdin:
cat
두 줄로 구성된 샘플 데이터 파일 date
. 이러한 실행의 출력 예는 다음과 같습니다.
$ ./go.pl
I am ./uux with arguments:
<-r>
<[email protected]>
<->
<my_remailserv!rmoc.pl>
<[email protected]>
<CP&[email protected]>
<[email protected]>
Here is stdin:
Thu Jun 27 14:20:46
Thu Jun 27 14:30:36