Ssh

SSH 沒有將標準輸出重定向到本地終端

  • January 6, 2010

我在 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

那個劇本讓我流血了。去掉所有儲存命令片段的變數(以及在 上不必要的輸入重定向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

如果可能的話:

  1. 不要使用 csh
  2. womble的 建議
  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

引用自:https://serverfault.com/questions/99886