我正在尝试创建一个可重用的脚本,该脚本将为远程 WordPress 站点 grep 一些配置值,但字符串似乎根据我连接到的服务器以不同的方式转义。如何创建一个在任何地方都以相同方式工作的命令?
例如,在主机 1 上,以下输出是我所追求的,即some_database_name\nsome_database_user
:
ssh [email protected] "cat /some-path/wp-config.php | grep -E 'DB_NAME|DB_USER'"
但是,在主机 2 上,相同的命令不起作用,因为它的输出DB_NAME: command not found\nDB_USER: command not found
就像尝试执行grep -E
命令后的字符串一样:
ssh [email protected] "cat /some-path/wp-config.php | grep -E 'DB_NAME|DB_USER'"
虽然转义单引号在我看来似乎没有必要,但当我转义它们时,我会得到完全相反的行为,因此在主机 1 上我收到“命令未找到”错误:
ssh [email protected] "cat /some-path/wp-config.php | grep -E \'DB_NAME|DB_USER\'"
在 Host 2 上我得到了我想要的结果:
ssh [email protected] "cat /some-path/wp-config.php | grep -E \'DB_NAME|DB_USER\'"
这两个命令如何根据运行它们的服务器而以不同的方式运行,以及如何将它们规范化以使一个命令在两台主机上都有效?
编辑:
作为一个更简单的示例,在主机 1 上,输出符合我的预期,但对于主机 2输出没有单引号。为什么会出现这种情况以及如何使这些行为相同?ssh [email protected] "echo \"'TEST'\""
'TEST'
ssh [email protected] "echo \"'TEST'\""
TEST