重複終端命令

重複終端命令

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並且它的工作方式完全相同。

相關內容