저는 현재 sed
from 을 사용하고 있습니다. 호출하는 사용자가 파일에 쓸 수 있는 권한이 없는 bash 스크립트 제한을 우회하기 위해 stdin
이 스크립트를 사용하고 있습니다.sed
echo "..." >> outputfile.conf
이게 내 목적이야글쓰기파일로:
echo "<VirtualHost *:80>
...
</VirtualHost>" | sudo sed -n "w/etc/apache2/sites-available/000-default.conf"
다음에 무엇을 해야 합니까?추가의같은 파일에?
if $enable_ssl; then
echo "<VirtualHost *:443>
...
</VirtualHost>" | sudo sed <opions-to-sed-here>
fi
답변1
>
더 높거나 다른 권한을 가진 쉘에 대한 일반적인 대안은 다음과 같습니다.
echo "replace file content with this line" | sudo tee protectedFile >/dev/null
추가하려면 다음을 사용하십시오 -a
.
echo "append this line to file" | sudo tee -a protectedFile >/dev/null
답변2
아니요 echo
:
string=$'"<VirtualHost *:443> \
... \
</VirtualHost>"'
sudo sed -i '$a\'"${string}"'' file
이 -i
옵션은 sed
파일이 그 자리에서 처리되도록 지시합니다(선택적으로 원본 버전에 접미사 추가).
sed 스크립트:
$
마지막 줄 일치a\
일치하는 줄 뒤에 텍스트 추가
그러나 빈 파일에서는 작동하지 않습니다(마지막 줄과 일치하는 입력 줄이 없기 때문입니다).
답변3
완전성을 위해 ed
다음 사항을 보유하고 있는 경우:
echo "$
a
<VirtualHost *:80>
...
</VirtualHost>
.
w" | sudo ed protectedFile
$
마지막 줄로 이동a
추가하고 이어서 추가할 데이터를 입력하며 단일 점이 포함된 줄로 끝납니다.w
대표하다쓰다(파일)
처음 두 명령은 연결(생성 $a
)할 수 있지만 빈 파일에서는 작동하지 않습니다. 단독으로는 작동합니다."마지막 줄로 이동"(무작동) 그런 다음"추가의"대신에"마지막 줄에 추가", 실제로는 존재하지 않습니다.