/usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml 파일의 일부는 다음과 같습니다.
<key name='alternative-port' type='q'>
<summary>Alternative port number</summary>
<description>
The port which the server will listen to if the 'use-alternative-port'
key is set to true. Valid values are in the range of 5000 to 50000.
</description>
<default>5900</default>
</key>
<key name='require-encryption' type='b'>
<summary>Require encryption</summary>
<description>
If true, remote users accessing the desktop are required to
support encryption. It is highly recommended that you use a
client which supports encryption unless the intervening network
is trusted.
</description>
<default>false</default>
</key>
<key name='authentication-methods' type='as'>
<summary>Allowed authentication methods</summary>
<description>
Lists the authentication methods with which remote users may
access the desktop.
There are two possible authentication methods; "vnc" causes the
remote user to be prompted for a password (the password is
specified by the vnc-password key) before connecting and "none"
which allows any remote user to connect.
</description>
<default>['none']</default>
</key>
이제 문자열이 false인 단락을 true로 변경하고 싶습니다. 쉘 스크립트를 사용하여 어떻게 해야 합니까?
답변1
귀하의 질문은 약간 불분명하지만 실제로 원하는 것이 무엇이든 쉘 스크립트에서 Perl을 호출할 수 있습니다.
- 다음 코드는 온라인
true
으로 만 변경됩니다 .false
5
#!/bin/sh
perl -pi -e 's/true/false/ if($. == 5)' /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
$. == 5
로 변경하면$. > 5
5행 이후 어디에서나 발생합니다.
답변2
<default>false</default>
귀하의 질문이 시작 섹션에서 어떻게 변경하는지 묻는 것을 이미 이해했습니다 .<default>true<default>
<key name='require-encryption' type='b'>
XML 파서를 사용하면 파일 줄의 실제 레이아웃이 아닌 구조를 기반으로 이 설정을 안정적으로 변경할 수 있습니다. 사용 방법은 다음과 같습니다 xmlstarlet
.
<root>
예를 들어 유효한 XML로 변환하기 위해 코드 조각을 ...로 래핑했습니다 </root>
. 원본 파일은 이미 유효한 XML이므로 편집할 필요는 없지만 보다 정확한 XPath 일치를 원할 수도 있습니다. 이 코드를 사용하여 값이 있는 속성이 있는 …/key/default
요소 의 경로를 일치시키고 값을 리터럴 로 변경합니다 .key
name
require-encryption
default
true
xmlstarlet ed -u '//key[@name="require-encryption"]/default' -v true org.gnome.Vino.gschema.xml
평소와 같이 이 작업을 내부에서 수행하려면 표준 레시피를 사용하세요 command > output.tmp && mv -f output.tmp output
. (이것은 많은 GNU 명령의 -i
/ --in-place
플래그가 뒤에서 하는 일과 거의 같습니다 .)
xmlstarlet … > org.gnome.Vino.gschema.xml.tmp &&
mv -f org.gnome.Vino.gschema.xml.tmp org.gnome.Vino.gschema.xml