이라는 터미널 명령이 있다고 가정합니다. foo
(실제로 이것은 비슷 cd
하거나 ls
더 복잡할 것입니다. 스크립트를 사용하지 않고 이 명령을 여러 번 수행할 수 있는 방법이 있습니까?
예를 들어, 다음과 같은 작업을 수행하고 싶습니다.
foo && foo && foo && foo && foo
내가 뭔가를 할 수 있는 방법이 있나요?
foo * 5
아니면 아마도
5:foo
저는 리눅스 머신을 사용하고 있습니다.
답변1
블로거의 답변에 세미쉼표를 추가하여 한 줄로 만드세요.
for variables in {1 2 3 4 5}; do ls; done
답변2
블로거 말이 맞아요. 그러나 구문을 정확하게 기록하는 것이 중요합니다. 대화형 셸(예: 터미널)을 사용하는 경우
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
thing2는 foo가 작동하는지 여부를 무시하기 위해 thing1이 제대로 실행되는 경우(기술적으로 0 값을 반환하는 경우)에만 실행됩니다. && 대신 세미콜론을 사용합니다.
답변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
정확히 동일하게 작동합니다.