PS版本 5.1.22621.4391
plink:版本 0.82
我仔细研究了通过plink 从 powershell 中正确地转义 awk 命令,但其中一个程序一直在吃单引号。
有没有办法通过 plink 运行这个命令?
echo "select setting from pg_settings where name = 'server_version';"
我的失败例子:
PS C:\Users> plink -load "FIS-S-LBX-PGS-202-a" -batch echo "select setting from pg_settings where name = 'server_version';"
select setting from pg_settings where name = server_version
PS C:\Users> plink -load "FIS-S-LBX-PGS-202-a" -batch echo --% "select setting from pg_settings where name = 'server_version';"
select setting from pg_settings where name = server_version
PS C:\Users> plink -load "FIS-S-LBX-PGS-202-a" psql -c --% 'select setting from pg_settings where name = ''server_version'';'
Access granted. Press Return to begin session.
ERROR: column "server_version" does not exist
LINE 1: select setting from pg_settings where name = server_version;
PS C:\Users> plink -load "FIS-S-LBX-PGS-202-a" -batch psql -c "select setting from pg_settings where name = 'server_version';"
psql: warning: extra command-line argument "pg_settings" ignored
[剪辑]
PS C:\Users> plink -load "FIS-S-LBX-PGS-202-a" -batch psql -c --% "select setting from pg_settings where name = 'server_version';"
psql: warning: extra command-line argument "pg_settings" ignored
您的最后一个操作很接近了——它可以阻止 PS 吃掉(双)引号,但是 plink 也同样会吃掉引号,所以您需要使用反斜杠来阻止这种情况:
或者你可以用反引号停止 PS,然后用反斜杠链接:
(但对我来说这太丑了!)
实际上是远程 shell 占用了单引号,一旦您让 plink 发送双引号,远程 shell 就会停止并根据需要提供一个参数
-c
。