SSH 未将标准输出重定向到本地终端

SSH 未将标准输出重定向到本地终端

我在 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 将其输出写入远程目录。

该行从批处理文件中得出:

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

当我输入它时(当然少了一组引号)它工作正常,我只是无法通过 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

答案1

那个脚本让我眼花缭乱。删除所有存储命令片段的变量(以及 上不必要的输入重定向grep),看看会有什么结果。引用几乎肯定会以你甚至不想想象的方式搞砸。在 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

答案2

如果有可能的话:

  1. 不要使用 csh
  2. 做什么沃姆布尔 建议
  3. 不要使用变量进行重定向,因为它不起作用

如果您需要能够更改重定向,至少在 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

相关内容