2015-02-09 145 views
0

我有一個腳本來操縱一些日誌文件,然後將它們推送到服務器,以加載到mysql並進行分析。除了收集日誌的自動化以外,我幾乎可以解決所有這些過程。我使用sed從日誌文件中取出所有",所以它可以更容易地導入到mysql中。當我運行下面的命令時,它工作正常,但在shell腳本中運行相同的命令,並創建一個空文件。我不知道爲什麼 - 任何幫助將不勝感激。sed在腳本中清空文件

sed 's/\"//g' /usr/local/tomcat/logs/localhost_access_log.$yest.txt > /$DIR/iweb$yest.txt 

這裏是完整的腳本。

#!/bin/bash 
#Script to manage catalina logs on our servers. 

#First create the needed variables. 
date=$(date +"%m_%d_%y") 
adate=$(date +"%Y-%m-%d") 
yest=$(date -d 'yesterday' +"%Y-%m-%d") 
Customer="iwebsup" 
log=/isweb/admin/catmanage/log 
DIR=/catmanage 

#Make Directory 
#mkdir /catmanage/tomcat1/ 

#Run access logs through sed to remove " from file 
echo "Removing quote marks from access log and moving to direcotry" &> $log.$date 
sed 's/\"//g' "/usr/local/tomcat/logs/localhost_access_log.$yest.txt" > "/$DIR/iweb$yest.txt" &> $log.$date 
+2

是'$'文字'$'符號還是變量y? – 2015-02-09 14:19:37

+0

$ yest是一個將昨天日期注入文件的變量。該變量被配置爲與tomcat如何在訪問日誌文件中放置日期相匹配 – Deldran 2015-02-09 14:30:59

+0

具有與其他用戶可以測試相同行爲的最小shell腳本如何? – Birei 2015-02-09 14:35:50

回答

2

您原來的問題顯示與>重定向,但您的實際腳本有&>。這些是相當不同的事情,事實上,後者可能與您的sh不兼容。

便攜,兼容的方式,包括錯誤重定向

command >file 2>&1 

你的家當行說#!/bin/bash但根據您的診斷的話,我猜你畢竟與sh運行此。

順便說一句,tr -d '"' <file >newfile將是一個更有效的方法來從文件中刪除雙引號。

+0

我改變了sed行以使用2>&1而不是&>並且解決了這個問題。謝謝。 – Deldran 2015-02-09 15:14:42

+0

我剛剛回到此處,看到Deldran的問題已被編輯爲包含腳本內容。問題的確在於重定向,所以這個答案值得加票。 – 2015-02-09 15:48:49

+0

你會如何推薦我登錄呢?根據下面的鏈接&>應發送STDOUT和STDEER到一個文件。每當我把它放在sed命令的末尾時,它就會生成一個空白文件,而不是一個沒有「。」的文件,我也試着在每個命令之後放置>>來將stdout添加到文件中並追加它。沒有任何東西會被寫入文件。http://www.tldp.org/LDP/abs/html/io-redirection。html – Deldran 2015-02-09 15:49:52

2

啓動一個shell腳本啓動一個新的系統進程。我懷疑在該腳本的子shell中,$yest未設置爲shell變量。如果你打算在shell腳本中使用$yest,理想情況下應該將它的值作爲參數傳遞給腳本 - 或者將shell變量作爲環境變量(export $yest)導出,該變量將由子shell繼承進程(所有子進程都繼承其父進程的環境)。

調試shell腳本時,在調試部分的開始部分包含set -xvu總是很有用,這樣您就可以查看腳本正在執行的操作以及變量中存儲的值。

-x Print commands and their arguments as they are executed. 
    -v Print shell input lines as they are read. 
    -u Treat unset variables as an error when substituting. 

您可以通過稍後運行set -xvu關閉此調試。

+0

我用完整的腳本更新了OP。我在腳本里面定義了變量$ yest,我已經在幾個沒有問題的chron中運行腳本。 – Deldran 2015-02-09 14:56:30