比如有如下 qemu 的命令行:
qemu-system-x86_64 \-machine q35,accel=kvm \-cpu host \-m 1G \-kernel /home/d/kernel/kernel \-initrd /home/d/rd/initramfs.cpio.gz \-append 'console=ttyS0 test="11 22"' \-netdev '{"type":"tap","vhost":true,"ifname":"eth_0","id":"hostnet0","script":"","downscript":""}' \-device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:c0:45:c7"}' \-nographic
上述命令的参数的格式是有效的,但是如果命令执行后通过 pgrep 查询命令行字符串,查询出的结果会把单引号去掉:
d@develop:~$ pgrep -af qemu-system-x86_64 | perl -0pe 's/ -/ \\\n-/g'19754 qemu-system-x86_64 \-machine q35,accel=kvm \-cpu host \-m 1G \-kernel /home/d/kernel/kernel \-initrd /home/d/rd/initramfs.cpio.gz \-append console=ttyS0 test="11 22" \-netdev {"type":"tap","vhost":true,"ifname":"eth_0","id":"hostnet0","script":"","downscript":""} \-device {"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:c0:45:c7"} \-nographic
去掉单引号的命令无法直接放到 shell 里去执行,我想找到一个通用的办法(不要仅限于 qemu 的参数)把 pgrpe 输出的命令行字符串中需要用单引号包起来的参数用单引号包起来,使其结果和最初执行的命令行字符串完全一样,问了 ai ,ai 解决不了,再次在这里求助 v 友。