2014-12-19 25 views
1

我有多個文件和一個非常長的命令列表。我無法一次全部運行它們,所以我需要一種聰明的方式來讀取和執行文件以及完成後刪除命令。執行並刪除文件中的命令

到目前爲止,我已經嘗試

for i in filename.txt ; do ; execute $i ; sed -s 's/$i//' ; done ; 

,但它不工作。在我介紹sed之前,$i正在執行。現在即使這樣也行不通。

我想到了一個解決方法,我將讀取第一行並刪除第一行,直到文件爲空。

任何更好的想法或命令?

+2

您可能想通過提供示例來澄清您要求的內容。 – EJK 2014-12-19 05:39:11

+0

爲什麼不能一氣呵成呢?文件中的命令將按順序執行。腳本運行時您是否擔心崩潰?你運行的命令有多複雜?他們都是單行命令嗎?它們涉及I/O重定向嗎? – 2014-12-19 06:01:20

+0

另外,'excecute'的意義是什麼?據推測,這是'execute'的拼寫錯誤,但它是你係統上的一個特殊命令嗎?它不是標準的Unix命令。 shell中有一個'exec',但你可能不想使用它。 – 2014-12-19 06:13:42

回答

0

這應該適合你,list.txt是包含命令的文件。

請確保在運行前備份命令文件

while read line; do $line;sed -i '1d' list.txt;done < "list.txt" 

sed -i編輯就地這樣list.txt將沿着循環改變,你將最終得到一個空文件。

0

我想你想要做的是這樣的:

while read -r -- i; do $i; sed -i "0,/$i/s/$i//;/^$/d" filename.txt; done < filename.txt 

文件被讀入循環。每行都被執行,並且sed命令將只刪除找到的第一個條目,然後刪除空行。

+0

當文件也被讀取時會發生什麼?目前尚不清楚行爲是否明確。 – 2014-12-19 06:11:44

+0

文件被更改,但sed命令確保只刪除執行的命令。你可以在一些代碼上測試它。 – jan 2014-12-19 06:16:17

+0

我在從命令文件中刪除任何東西時遇到問題。即使執行了幾百行後,源文件仍然是原始大小 - 所有行仍然存在。我必須在Mac OS X上使用'-i.bak';備份後綴是強制性的。所以,我仍然堅信。 – 2014-12-19 06:29:08

0

我認爲有一種方法是讓所有命令的源文件都被執行,並且執行這些命令的腳本還會寫入第二個日誌文件,這些文件會在執行時列出這些文件。 如果您需要恢復該過程,您將處理源文件中不存在於日誌文件中的行。

logfile=commands.log 
srcfile=commands.src 
oldfile=commands.old 

trap "mv $oldfile $logfile; exit 1" 0 1 2 3 13 15 

[ -f $logfile ] || cp /dev/null $logfile 
cp $logfile $oldfile 

comm -23 $srcfile $logfile | 
while read -r line 
do 
    echo "$line" >> $oldfile 
    ($line) < /dev/null 
done 

mv $oldfile $logfile 
trap 0 
相關問題