假设我有一个名为的终端命令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
blogger 是对的。但是,务必准确注意语法:如果您使用的是交互式 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}; do
if [[ $? ]]; then
foo
fi
done
您会注意到 foo 后面没有分号;在可以使用换行符的环境中(例如您最喜欢的文本编辑器)编写完整的 bash 脚本时,换行符的作用与分号相同:)
另请注意,你可以使用
[[ $? ]] && foo
而不是 if 语句;意识到 && 意味着只有前一个 foo 没有错误时才会执行 foo。即在函数调用中
thing1 && thing2
仅当 thing1 运行正常时才会执行 thing2(从技术上讲,如果它返回 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
,它将发挥完全相同的作用。