本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd-escape — 转义与还原单元名称中的特殊字符
systemd-escape
[OPTIONS...] [STRING...]
systemd-escape 可用于 转义单元名称中的特殊字符, 也可用于还原操作。
可以在命令行上指定任意数量的字符串, 表示依次分别处理它们。 处理结果将使用空格分隔。
默认的行为是转义操作,
但若使用了 --unescape
选项,
则表示反向的还原操作。如果使用了 --mangle
选项,
则会使用一种特殊的转义规则,
也就是假定字符串已经经过了转义,
仅转义那些显而易见必须转义的字符。
关于转义与还原算法的细节,参见 systemd.unit(5) 手册。
能够识别的命令行选项如下:
--suffix=
¶在输出结果尾部添加一个单元类型后缀。
必须是
"service
" 或
"mount
" 这样实际有效的后缀。不能与
--template=
, --unescape
,
--mangle
选项一起使用。
--template=
¶将转义之后的结果插入一个单元名称模版。
接受一个类似
foobar@.service
这样的模版名。但与
--unescape
一起使用时,
则接受此模板实例化之后的单元名称,并仅提取和还原实例化的部分。
不能与
--suffix=
,
--instance
,
--mangle
选项一起使用。
--path
, -p
¶在转义或还原字符串时,假定其是一个文件系统路径。
这将导致删除字符串中的开头/结尾/重复的 "/
" 字符、 ".
" 与
"..
" 字符。
特别适合于生成可被单元文件中的 "%f
" 替换符还原的字符串。参见
systemd.unit(5) 手册。
--unescape
, -u
¶将已经转义过的字符串还原。
不能与
--suffix=
或
--mangle
选项一起使用。
--mangle
, -m
¶与 --escape
类似,
但是仅转义那些显而易见必须转义的字符,
并且允许自动添加适当的单元类型后缀。
不能与
--suffix=
, --template=
,
--unescape
选项一起使用。
--instance
¶用于 --unescape
选项,
表示只还原与显示一个实例化单元名称中的实例参数。
用于尚未实例化的模板(例如
ssh@.service
)或非实例化单元(例如
ssh.service
)会导致出错。
必须和 --unescape
一起使用,
禁止与
--template
一起使用。
-h
, --help
¶--version
¶转义一个字符串
$ systemd-escape 'Hallöchen, Meister' Hall\xc3\xb6chen\x2c\x20Meister
还原一个字符串
$ systemd-escape -u 'Hall\xc3\xb6chen\x2c\x20Meister' Hallöchen, Meister
为一个路径生成对应的单元名
$ systemd-escape -p --suffix=mount "/tmp//waldi/foobar/" tmp-waldi-foobar.mount
从三个字符串派生三个对应的单元实例名
$ systemd-escape --template=systemd-nspawn@.service 'My Container 1' 'containerb' 'container/III' systemd-nspawn@My\x20Container\x201.service systemd-nspawn@containerb.service systemd-nspawn@container-III.service
从实例化单元中提取实例参数:
$ systemd-escape -u --instance 'systemd-nspawn@My\x20Container\x201.service' My Container 1
从特定模板的实例化单元中提取实例参数:
$ systemd-escape -u --template=systemd-nspawn@.service 'systemd-nspawn@My\x20Container\x201.service' My Container 1