SSH不会将stdoutredirect到本地terminal

我有一个csh脚本中的以下相关行:

#!/bin/csh -xv set dvar = `date +"^%m\/%d\/%y"` set filedate = `date +%b%d%Y` set grepstring = "grep "\"$dvar\"" </home/user/log/logfile" set outstring = ">> serverlog_$filedate.txt" grep "$dvar" <logfile >serverlog_$filedate.txt ssh SERVER1 \"\"$grepstring\"\" $outstring 

本地日志文件中的第一个grep工作得很好,但SSH grep将其输出写入远程目录。

该行出来的batch file为:

 ssh SERVER1 ""grep "^01\/05\/10" <home/user/log/logfile"" >> serverlog_Jan052010.txt 

当我键入它(当然less用一套引号),它工作正常,我只是不能从一个csh脚本得到这个工作。

你将如何得到这个命令输出到本地机器上的指定文件?

编辑:这是最后的结果工作感谢womble:

 #!/bin/csh set dvar = `date +"%m\/%d\/%y"` set filedate = `date +%b%d%Y` grep "^$dvar" logfile > serverlog_$filedate.txt ssh SERVER1 grep "^$dvar" /home/user/log/logfile >> serverlog_$filedate.txt 

那个脚本让我眼睛stream血。 摆脱存储命令碎片的所有variables(以及grep上的不必要的inputredirect),并查看得到你的位置。 引用几乎肯定是以你不想想的方式搞砸了。 在Bourne shell中,我会写这样的东西:

 today="$(date +"%m\/%d\/%y")" filetoday="$(date +%b%d%Y)" grep "^$today" logfile > serverlog_${filetoday}.txt ssh SERVER1 grep "^$today" /home/user/log/logfile >> serverlog_${filetoday}.txt 

如果可能的话:

  1. 不要使用csh
  2. 做什么womblebuild议
  3. 不要使用variables进行redirect,因为它不起作用

如果你需要能够改变redirect,至less在Bash和sh中,你可以这样做:

 file="/some/file" if [ somecondition ] then exec 3>&1 # send output of file descriptor 3 to stdout elif [ condition2 ] exec 3>>"$file" # append it to the file else exec 3>"$file" # overwrite the file fi echo "text" >&3 # output to chosen location