为什么此ssh命令在ksh中不起作用?

问题描述

| 我正在调整KSH脚本,并尝试SSH到各种主机中并在vfstab上执行grep命令,该命令将返回特定的行。问题是,我无法在下面进行以下工作。我正在尝试获取它返回的行并将其附加到目标文件。是否有更好的方法来执行此操作,例如将grep语句分配给命令变量?该命令在脚本中可以正常工作,但是嵌套的引号似乎会使它很麻烦。无论如何,这是一行:
ssh $user@$host \"grep \'/var/corefiles\' $VFSTAB_LOC | awk \'{print $3,$7}\' \" >> $DEST
结果是:
 awk: Syntax error near line 1
 awk: illegal statement near line one
如果有更好/更正确的方法,请告诉我!     

解决方法

        您将远程命令放在双引号中,因此awk主体中的$ 3和$ 7将被替换。 awk可能会看到
\'{print,}\'
。在awk主体中转义美元符号。
ssh $user@$host \"grep \'/var/corefiles\' $VFSTAB_LOC | awk \'{print \\$3,\\$7}\' \" >> $DEST
                                                                 ^    ^
    ,        我在下面尝试过,它对我有用(在ksh中)不知道为什么在您的情况下会出错
user=\"username\";
host=\"somehost\";
VFSTAB_LOC=\"result.out\";
DEST=\"/home/username/aaa.out\";
echo $DEST;
`ssh $user@$host \"grep \'/abc/dyf\' $VFSTAB_LOC | awk \'{print $3,$1}\'\" >> $DEST`;