2015-03-13 26 views
2

我有一種方法可以從特定行開始運行bash腳本?Bash:從特定行開始運行腳本

假設我的腳本看起來像這樣:

0 #!/bin/bash 
1 ... 
2 clone a repository 
3 ... 
4 command that crashed 

我去修復4號線,我想重新運行腳本,而不從線路1,2,3上運行的代碼,而是直接從第4行

開始

我快速搜索這個問題的標題沒有給我一個答案。如果有一種方法可以用bash來實現,那將會很有用。

謝謝你的答案。如果你也希望將一些線開始另一種解決方案是:

# assuming you want to run your script except from line 4 to 7 
sed '4,7s/^/#/g' -i script.sh; ./sript.sh #this replaces the beginning of the line^with # from lines 4 to 7 
# to undo the comments 
sed '4,7s/^#//g' -i script.sh; ./sript.sh 
+0

我不相信有什麼辦法可以做到這一點超越註釋掉的那些明顯或複製和粘貼。 – 2015-03-13 18:00:57

+0

謝謝,但我長期以來一直在尋找更快的解決方案。 – daniela 2015-03-13 18:03:57

+0

這就是爲什麼我沒有發佈它作爲答案。雖然我不指望你會得到更好的。那麼...我想你可能會使用類似'sed -ne'##,$ p'「$ script」|的東西bash -s',如果你真的想忽略某條線上的* everything *。 – 2015-03-13 18:13:37

回答

6

試試這個:

bash <(sed -n '5,$p' script.sh) 
+0

我只是編輯我的問題,因爲我也想在開始時保留一些行的註釋選項。也許還有更好的方法來做到這一點(比我的建議)......這樣你就不需要真正編輯腳本。 – daniela 2015-03-13 18:58:40

+1

另一種方法是'tail -n +5 script.sh | bash'。然而,對於其中的任何一種,如果你把你的行數混淆起來,例如告訴它開始在循環中間運行,事情就會破裂... – twalberg 2015-03-13 19:04:17

+0

這太醜了!它很漂亮! – 2015-03-13 19:58:26