python - 正确处理 bash 命令转义字符
问题描述
在 Linux Bash 脚本中
/bin/sh
相当于/bin//sh
e\tc
转换为etc
\'
转换为'
"b"
转换为b
'in'
转换为in
将任何字符串转换为其“bash 等效项”的确切方法是什么?(理想情况下在python中)
例如取/"b"'i'n///\s"h"
which 转换/bin/sh
为如下所示:
r3t@r3t:~/$ /"b"'i'n///\s"h"
$
解决方案
一种选择是使用shlex
标准库中的模块。
import shlex
text = """\
/"b"'i'n///\s"h"
"""
s = shlex.shlex(text, posix=True)
list(s)
# ['/', 'bin', '/', '/', '/', 'sh']
s = shlex.shlex(text, posix=True)
"".join(s)
# '/bin///sh'
上面的内容等价于使用 bash 输入的内容:
$ echo /"b"'i'n///\s"h"
/bin///sh
推荐阅读
- github - Github 桌面:如果我提交其他更改,我会丢失隐藏的更改吗?
- c++ - 如何使用 OLE 自动化启动 OneNote 并将其置于前台?
- swift - 核心数据 - 更有效的实体或属性
- git - GIT合并添加文件但不保留自己的文件
- ruby - 如何修复 Rubocop 中的 Style/MultipleComparison 攻击?
- php - 获取json列中的所有数据
- html - 空格和字符长度的密码验证
- tarantool - 将 graylog 与 tarantool 一起使用的好习惯是什么?
- javascript - 如何使用Javascript在一个页面上分别使用两个复制事件?
- python - TypeError:加载pickle文件时需要一个整数(获取类型字节)