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
那個劇本讓我流血了。去掉所有儲存命令片段的變數(以及在 上不必要的輸入重定向
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
如果可能的話:
- 不要使用 csh
- 做womble的 建議
- 不要使用變數進行重定向,因為它不起作用
如果您需要能夠更改重定向,至少在 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