重复一个终端命令


1

假设我有一个终端命令被调用foo(实际上这将是类似cdls更复杂的东西。有没有一种方法,我可以多次执行此命令而不使用脚本。

例如,我想做相同的以下内容:

foo && foo && foo && foo && foo

有什么方法可以做一些事情

foo * 5 

或者可能

5:foo

我正在使用linux机器。


此外for,你可以使用watch,如在此提到的StackOverflow问题
厄尼

Answers:


1

将一些半逗号添加到博客的答案中,使其成为单行:

for variables in {1 2 3 4 5};  do ls; done

1

博客是对的。但是,重要的是要准确地注意语法:如果你正在使用交互式shell(例如终端)

echo -n; for i in {1..5}; do if [[ $? ]]; then foo; fi; done

“$?” 返回上一个函数调用的状态; 因为我们首先调用“echo”,所以循环的第一次迭代将是“true”(bash中为0)。“fi”关闭“if”语句,并且分号是必需的。

如果您正在编写一个bash脚本,这是同样的事情:

{ !/ bin / bash
echo -n
for i in {1..5}; 这样做
如果[[$?]]; 然后
foo
fi
完成

你会注意到foo之后没有分号; 当在可用换行符的环境中编写完整的bash脚本时(例如你最喜欢的文本编辑器),换行符与分号相同:)

另外,请注意您可以改为使用

[[ $? ]] && foo

而不是if语句; 意识到&&意味着只有在前一个foo没有错误的情况下才会执行foo。即在函数调用中

thing1 && thing2

如果thing1运行正常(技术上,如果它返回0值)以忽略foo是否正常工作,则只会执行thing2,使用分号代替&&


1

您可以尝试以下方式:

for i in {1..10}; do YourCommand; done

例:

for i in {1..5}; do ls -l; done


0

你尝试过使用“for”循环吗?

for VARIABLE in 1 2 3 4 5 .. N
do
    command1
    command2
    commandN
done

当我尝试这样做的时候,它只是提出了一条新的路线for>
--Nosrettap

0

我发现了一个伟大的方法在这里

我知道它仍然是“一种脚本”,但我认为它是最接近你没有用命令输入整个命令行就可以得到的。

您可以创建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它,它将完全相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.