如何解决如何复制 bash 对作为参数传递给其他命令的命令的转义
我将命令执行的结果作为输入传递给 python,如下所示:
$ python parse_ips.py "$(kubectl get configmap ...)"
这在从命令行执行时工作正常,但是我现在正在尝试使用 PyCharm 编辑文件。因此,我需要此命令结果的转义版本,我可以将其粘贴到 PyCharm 的调试配置中,因为我无法像在命令行上那样实时执行该命令。
但是,我正在努力寻找一种方法来复制后台执行的转义 bash,因此我可以将结果用作 PyCharm 配置中的参数。运行上面的 kubectl
命令会产生一个包含空格和引号的多行字符串。当我将其粘贴到 PyCharm 时,它只是将其解释为多个参数。我正在寻找转义结果,我可以将其直接粘贴到命令行中,或粘贴到 PyCharm 的调试配置中,以使用固定参数实现相同的结果进行测试。
任何帮助将不胜感激!
编辑:澄清一下,我的意思是在命令行上,$(kubectl ...)
命令的结果在被引号 ("$(kubectl ...)"
) 包围时作为单个命令行参数传递到 python 程序中。所以在python程序中,你可以访问sys.argv[1]
,它将包含$(kubectl get configmap ...)
的整个执行输出。但是,如果我自己在命令行上执行该命令,结果是一个多行字符串。
如果我然后将结果复制到 PyCharm(甚至再次在命令行上),它会被解释为许多命令行参数。例如。它看起来像这样:
$ python parse_ips.py apiVersion: v1
data:
item1: ifconfig-push 127.0.0.0 255.255.0.0
item2: ifconfig-push 127.0.0.1 255.255.0.0
item3: ifconfig-push 127.0.0.2 255.255.0.0
...
等等。这显然不像以前那样工作。因此,如果每次不从命令行进行 kubectl
调用,我都无法测试我的程序。我希望复制 "$(kubectl ...)"
转换成的内容,以便它能够将整个输出作为单个命令行条目传递。
解决方法
我正在努力寻找一种方法来复制 bash 在幕后所做的转义
通常使用 printf "%q"
来转义。
printf "%q" "$(kubectl get configmap ....)"
这是 printf
作为 bash 内置命令。它与 coreutils printf
不同,最新的还支持 %q
不同的引用样式:
/usr/bin/printf "%q" "$(kubectl get configmap ....)"
现代 bash 也有引用扩展:
var="$(kubectl get configmap ....)"
echo "${var@Q}"
还有set -x
输出的引用样式。
我建议使用文件:
kubectl get configmap ... > /tmp/tempfile
python parse_ips.py "$(cat /tmp/tempfile)"
使用 xclip
,您可以将命令输出直接复制到 X 服务器剪贴板,这很方便:
printf "%q" "$(kubectl get configmap ...)" | xclip -selection clipboard
# then in another window:
python parse_ips.py <right mouse click><select paste>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。