我有多個文件和一個非常長的命令列表。我無法一次全部運行它們,所以我需要一種聰明的方式來讀取和執行文件以及完成後刪除命令。執行並刪除文件中的命令
到目前爲止,我已經嘗試
for i in filename.txt ; do ; execute $i ; sed -s 's/$i//' ; done ;
,但它不工作。在我介紹sed
之前,$i
正在執行。現在即使這樣也行不通。
我想到了一個解決方法,我將讀取第一行並刪除第一行,直到文件爲空。
任何更好的想法或命令?
我有多個文件和一個非常長的命令列表。我無法一次全部運行它們,所以我需要一種聰明的方式來讀取和執行文件以及完成後刪除命令。執行並刪除文件中的命令
到目前爲止,我已經嘗試
for i in filename.txt ; do ; execute $i ; sed -s 's/$i//' ; done ;
,但它不工作。在我介紹sed
之前,$i
正在執行。現在即使這樣也行不通。
我想到了一個解決方法,我將讀取第一行並刪除第一行,直到文件爲空。
任何更好的想法或命令?
這應該適合你,list.txt是包含命令的文件。
請確保在運行前備份命令文件。
while read line; do $line;sed -i '1d' list.txt;done < "list.txt"
sed -i編輯就地這樣list.txt將沿着循環改變,你將最終得到一個空文件。
我想你想要做的是這樣的:
while read -r -- i; do $i; sed -i "0,/$i/s/$i//;/^$/d" filename.txt; done < filename.txt
文件被讀入循環。每行都被執行,並且sed命令將只刪除找到的第一個條目,然後刪除空行。
當文件也被讀取時會發生什麼?目前尚不清楚行爲是否明確。 – 2014-12-19 06:11:44
文件被更改,但sed命令確保只刪除執行的命令。你可以在一些代碼上測試它。 – jan 2014-12-19 06:16:17
我在從命令文件中刪除任何東西時遇到問題。即使執行了幾百行後,源文件仍然是原始大小 - 所有行仍然存在。我必須在Mac OS X上使用'-i.bak';備份後綴是強制性的。所以,我仍然堅信。 – 2014-12-19 06:29:08
我認爲有一種方法是讓所有命令的源文件都被執行,並且執行這些命令的腳本還會寫入第二個日誌文件,這些文件會在執行時列出這些文件。 如果您需要恢復該過程,您將處理源文件中不存在於日誌文件中的行。
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
您可能想通過提供示例來澄清您要求的內容。 – EJK 2014-12-19 05:39:11
爲什麼不能一氣呵成呢?文件中的命令將按順序執行。腳本運行時您是否擔心崩潰?你運行的命令有多複雜?他們都是單行命令嗎?它們涉及I/O重定向嗎? – 2014-12-19 06:01:20
另外,'excecute'的意義是什麼?據推測,這是'execute'的拼寫錯誤,但它是你係統上的一個特殊命令嗎?它不是標準的Unix命令。 shell中有一個'exec',但你可能不想使用它。 – 2014-12-19 06:13:42