foo
假設我有一個名為(實際上這將是類似cd
或或更複雜的東西)的終端命令ls
。
例如,我想要執行以下等效操作:
foo && foo && foo && foo && foo
有什麼方法可以讓我做一些類似的事情
foo * 5
或者可能
5:foo
我使用的是linux機器。
答案1
在部落客的答案中加入一些半逗號,使其成為一行:
for variables in {1 2 3 4 5}; do ls; done
答案2
博主說得對。但是,請務必準確注意語法:如果您使用的是互動式 shell(例如終端)
echo -n; for i in {1..5}; do if [[ $? ]]; then foo; fi; done
“$?”返回前一個函數呼叫的狀態;因為我們先呼叫“echo”,所以循環的第一次迭代將為“true”(bash 中為 0)。
如果您正在編寫 bash 腳本,這也是同樣的事情:
#!/bin/bash
echo -n
for i in {1..5};如果
[[ $? ]];然後
foo
fi
完成
你會注意到 foo 後面沒有分號;在可以使用換行符的環境中(例如您最喜歡的文字編輯器)編寫完整的 bash 腳本時,換行符號與分號的作用相同:)
另請注意,您可以改為使用
[[ $? ]] && foo
而不是 if 語句;意識到 && 意味著 foo 只會在前一個 foo 沒有錯誤的情況下才會被執行。即在函數呼叫中
thing1 && thing2
thing2 僅在 thing1 運作良好時才會執行(從技術上講,如果它返回 0 值)以忽略 foo 是否工作,使用分號而不是 &&
答案3
你可以嘗試這樣的事情:
for i in {1..10}; do YourCommand; done
例子:
for i in {1..5}; do ls -l; done
答案4
我發現了一個很棒的方法這裡。
我知道它仍然是“某種腳本”,但我認為它是您無需輸入整個命令行即可獲得的最接近的命令。
repeat
您可以建立可以執行此操作的命令:
repeat 5 ./foo
將以下行加到末尾~/.bashrc
(如果您使用的是 bash):
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
下次登入(或啟動 bash)時,您可以使用repeat 5 ./foo
.
順便提一句。repeat
在 csh、tcsh 和 zsh 中已經是一個關鍵字(其作用完全相同),因此透過此添加,您將其添加到其中,bash
並且它的工作方式完全相同。