다음 쉘 스크립트가 있습니다.
#!/bin/sh
echo "Configuring Xdebug"
ip=10.0.2.2
xdebug_config="/etc/php/7.2/mods-available/xdebug.ini"
echo "IP for the xdebug to connect back: ${ip}"
echo "Xdebug Configuration path: ${xdebug_config}"
echo "Port for the Xdebug to connect back: ${XDEBUG_PORT}"
echo "Optimize for ${IDE} ide"
if [ $IDE=='atom' ]; then
echo "Configuring xdebug for ATOM ide"
config="xdebug.remote_enable = 1
xdebug.remote_host=${ip}
xdebug.remote_port = ${XDEBUG_PORT}
xdebug.max_nesting_level = 1000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true
xdebug.remote_log=xdebug.log"
# replace the file in $xdebug_config var except first line
fi
내가 원하는 것은 $xdebug_config
변수에 언급된 파일의 첫 번째 줄을 바꾸는 것입니다.와는 별개로첫번째 줄. 예를 들어, 파일이 다음과 같은 경우:
line 1
line 2
somethig else
lalala
다음과 같이 변환하고 싶습니다.
line 1
xdebug.remote_enable = 1
xdebug.remote_host=${ip}
xdebug.remote_port = ${XDEBUG_PORT}
xdebug.max_nesting_level = 1000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true
xdebug.remote_log=xdebug.log
어떻게 해야 하나요?
편집 1
의견의 요청에 따라 $xdebug_config
다음과 같은 가능한 값이 포함될 수 있습니다.
/etc/php/7.2/mods-available/xdebug.ini
/etc/php/5.6/mods-available/xdebug.ini
/etc/php/7.0/mods-available/xdebug.ini
일반적으로 다음 형식을 사용합니다.
/etc/php/^number^.^number^/mods-available/xdebug.ini
편집 2
쉘 스크립트를 더욱 명확하게 개선했습니다.
답변1
여기 문서는 어떤가요?
line1=$(head -1 "$1")
cat <<EORL >"$1"
${line1}
this is line2
how about this for line3?
let's do another line!
moving on to the next line
Wait! There's more???
EORL
exit 0
답변2
파일의 내용을 알려진 데이터로 바꾸되 첫 번째 줄은 유지하려면 다음을 수행할 수 있습니다.
oldfile="/path/to/original/file"
newfile="$(mktemp)"
head -n1 "$oldfile" > "$newfile"
cat << EOF >> "$newfile"
Hey, all of these lines?
The lines after "cat"?
All of these lines up to and excluding the next line will be written.
EOF
mv "$oldfile" "${oldfile}.old"
mv "$newfile" "$oldfile"
새 파일을 만들고 완전히 구성된 후 해당 위치로 이동하면 롤백해야 할 경우를 대비해 마지막 버전을 유지할 수 있다는 이점이 있습니다.
그렇게 하는 데 관심이 없다면 이전 파일을 날려버릴 수 있지만 동일한 작업으로 해당 파일을 읽고 쓸 수는 없으므로 다음과 같이 작동합니다.
header="$(head -n1 /path/to/file)"
echo "$header" > /path/to/file
cat << EOF >> /path/to/file
Hey, all of these lines?
The lines after "cat"?
All of these lines up to and excluding the next line will be written.
EOF
답변3
난 쓸수있다
{ sed 1q "$xdebug_config"; echo "$config"; } | sponge "$xdebug_config"
sponge
moreutils
패키지 내부에 위치해 있습니다 . 설치하고 싶지 않은 경우:
tmp=$(mktemp)
{ sed 1q "$xdebug_config"; echo "$config"; } > "$tmp" && mv "$tmp" "$xdebug_config"
답변4
다음을 수행할 수 있습니다.
tempd=$(mktemp -d);printf '%s\n' "$config" > "$tempd/config"
sed -i -e "r $tempd/config" -e q "$xdebug_config"
rm -rf "$tempd"