나는 printf를 사용했지만 파일 자체에서 변수를 가져옵니다. new_file을 변경하지 않고 모든 코드를 복사하고 싶습니다.
printf "${name}_delete()
{
bhyvectl --vm=${name} --destroy
sleep 5
ifconfig ${tap} destroy
sysrc cloned_interfaces-=${tap}
sed -i '' 's/ addm ${tap}//g' /etc/rc.conf
sed -i '' 's/service ${name} start | sleep 5//g' /usr/local/etc/rc.d/bhyve
sed -i '' '/^$/d' /usr/local/etc/rc.d/bhyve
zfs destroy -r zroot/VMs/${name}
rm /usr/local/etc/rc.d/${name}
}\n" >> new_file
답변1
cat
이를 수행하는 가장 좋은 도구는 여기에 참조된 문서를 사용하는 것이라고 생각합니다.
cat <<'END_SCRIPT' >>new_file
${name}_delete()
{
bhyvectl --vm=${name} --destroy
sleep 5
ifconfig ${tap} destroy
sysrc cloned_interfaces-=${tap}
sed -i '' 's/ addm ${tap}//g' /etc/rc.conf
sed -i '' 's/service ${name} start | sleep 5//g' /usr/local/etc/rc.d/bhyve
sed -i '' '/^$/d' /usr/local/etc/rc.d/bhyve
zfs destroy -r zroot/VMs/${name}
rm /usr/local/etc/rc.d/${name}
}
END_SCRIPT
이는 변수나 다른 확장의 값을 바꾸지 않고 문서의 내용을 있는 그대로 파일의 끝에 추가합니다 new_file
.
END_SCRIPT
이를 만드는 것은 초기 구분 기호에 대한 참조입니다.선두여기 - 문서. 문자열 END_SCRIPT
은 임의적이지만 어느 정도 설명이 가능하도록 선택하는 것이 합리적입니다(설명 변수 이름을 선택하는 것처럼).
출력하는 스크립트에는 따옴표가 없는 변수 확장 및 기타 오류가 포함되어 있습니다. 다음을 수정하세요.
cat <<'END_SCRIPT' >>new_file
${name}_delete ()
{
bhyvectl --vm="$name" --destroy
sleep 5
ifconfig "$tap" destroy
sysrc cloned_interfaces-="$tap"
sed -i '' "s/ addm $tap//g" /etc/rc.conf
sed -i '' "s/service $name start | sleep 5//g" /usr/local/etc/rc.d/bhyve
sed -i '' '/^$/d' /usr/local/etc/rc.d/bhyve
zfs destroy -r "zroot/VMs/$name"
rm "/usr/local/etc/rc.d/$name"
}
END_SCRIPT
임베디드 스크립트가 실행될 때 두 호출 모두에서 변수 합계를 확장하고 싶다고 가정합니다 tap
. 변수 이름 주위의 불필요한 중괄호를 제거하고 적절한 큰따옴표를 추가했습니다.name
sed