동적으로 쉘 스크립트를 생성하고 실행을 위해 원격 서버로 보냅니다. 시스템이 실행하려고 하는 여러 줄, 작은따옴표, 큰따옴표, 기타 특수 문자가 있는 파일의 내용을 변수에 삽입하려고 할 때를 제외하면 모든 것이 잘 작동합니다.
예:
my_script=$(cat some script.sh)
cont=$(cat some_template_with_special_chars.sh)
var='the_var_name_to_inject'
kv="$var=$file_contents"
script_to_send=$kv$my_script
sh -t -t -i key usr@ip "$script_to_send"
이제 some_template_with_special_chars.sh의 내용이 간단한 텍스트이면 작동하지만 여러 줄과 특수 문자가 있으면 작동하지 않습니다. 또 다른 문제는 큰따옴표를 사용해도 공백이 손실된다는 것입니다.
답변1
"printf"를 사용하여 문자열을 이스케이프합니다.
내가 올바르게 이해했다면 스크립트 파일과 연결될 변수 할당 문을 생성하고 모든 것이 셸에서 실행될 것입니다.
이 경우 다음을 제안합니다.
#!/bin/bash
my_script=$(<somescript.sh)
cont=$(<file)
var='xx'
# This will escape the string in $cont, and store it in $kv
printf -v kv "$var=%q" "$cont"
script_to_send="$kv
$my_script"
# sh -c used for testing here
sh -c "$script_to_send"
예:
가정somescript.sh
echo "This is the value of xx:"
echo "$xx"
echo 'Script terminated'
그리고 file
포함
aa
bb"
'cc
dd
산출:
This is the value of xx:
aa
bb"
'cc
dd
Script terminated