복잡한 변수 콘텐츠를 수동으로 생성

복잡한 변수 콘텐츠를 수동으로 생성

동적으로 쉘 스크립트를 생성하고 실행을 위해 원격 서버로 보냅니다. 시스템이 실행하려고 하는 여러 줄, 작은따옴표, 큰따옴표, 기타 특수 문자가 있는 파일의 내용을 변수에 삽입하려고 할 때를 제외하면 모든 것이 잘 작동합니다.

예:

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

관련 정보