명령 (예를 실행할 수있는 방법이 있나요 ps aux|grep someprocess
용) n 개의 시간은?
다음과 같은 것 :
run -n 10 'ps aux|grep someprocess'
대화식으로 사용하고 싶습니다. 스크립트를 게시하지 마십시오.
업데이트 : 내가 묻는 이유는 많은 컴퓨터에서 작업하고 모든 컴퓨터에서 동일한 기능을 얻기 위해 모든 스크립트로 모든 스크립트를 가져오고 싶지 않기 때문입니다.
명령 (예를 실행할 수있는 방법이 있나요 ps aux|grep someprocess
용) n 개의 시간은?
다음과 같은 것 :
run -n 10 'ps aux|grep someprocess'
대화식으로 사용하고 싶습니다. 스크립트를 게시하지 마십시오.
업데이트 : 내가 묻는 이유는 많은 컴퓨터에서 작업하고 모든 컴퓨터에서 동일한 기능을 얻기 위해 모든 스크립트로 모든 스크립트를 가져오고 싶지 않기 때문입니다.
답변:
Bourne 쉘 for
루프가 설계된 것의 사소한 하위 세트이므로 이와 같은 명령 또는 셸 내장이 존재한다고 생각하지 않으므로 이와 같은 명령을 구현하는 것은 매우 간단합니다.
우선 더미 for
루프를 사용할 수 있습니다 .
for i in `seq 10`; do command; done
또는 시퀀스를 생성하기 위해 Bash 내장을 사용하여 JimB의 제안과 동일합니다.
for i in {1..10}; do command; done
이것은 실행 열 번 반복 할 command
때마다 - 그것은 파이프 나에 의해 분리되는 일련의 명령이 될 수 ;
또는 &&
. $i
변수를 사용하여 현재 반복을 알 수 있습니다 .
이 한 줄짜리 스크립트를 스크립트로 간주하고 바람직하지 않은 (그러나 아마도 유효한) 이유로 인해 .bashrc (unested)에서 다음과 같은 명령으로 구현 할 수 있습니다.
#function run
run() {
number=$1
shift
for i in `seq $number`; do
$@
done
}
용법:
run 10 command
예:
run 5 echo 'Hello World!'
for
이다 내장 반복하는의 배쉬.
seq
다음 과 같은 내장 범위를 가지고 있습니다 . {1..10}
.bashrc
if {1..$number}
와 교환 될 때 완벽하게 작동합니다 `seq $number`
.
ps aux | grep someprocess
일정 시간 동안 프로그램 변경 사항을보고 싶은 것 같습니다. Eduardo는 귀하의 질문에 정확하게 대답하는 대답을 주었지만 대안이 있습니다. watch
:
watch 'ps aux | grep someprocess'
쉘이 명령을 "run watch ps aux"로 해석하지 않고 결과를 파이프하는 것을 피하기 위해 명령을 작은 따옴표로 묶었습니다 grep someprocess
. 이전 명령을 수행하는 다른 방법은 다음과 같습니다.
watch ps aux \| grep someprocess
기본적으로 watch
2 초마다 새로 고침되며 -n
옵션을 사용하여 변경할 수 있습니다 . 예를 들어 1 초 간격을 유지하려는 경우 :
watch -n 1 'ps aux | grep someprocess'
재미로
pgrep ssh ;!!;!!;!!;!!;!!;!!
for
가 가장 좋습니다. 어쨌든 대답 주셔서 감사합니다.
cmd ;!!
한 줄 에 현재 줄 앞에 입력 한 명령을 반복 하지 않습니까? 두 개의 별도 history
항목 이어야 합니다.
;
와 함께 &&
첫 번째 실패에 중지 할 수 있습니다.
이전 답변과 비슷하지만 for 루프가 필요하지 않습니다.
seq 10 | xargs -I -- echo "hello"
인수 또는 옵션이없는 xargs에 seq의 파이프 출력
echo "hello" 1 2 3 4 5 6 7 8 9 10
됩니다. xargs -n 1
는 각 입력 (번호) 당 하나의 프로세스와 -P 10
병렬 실행 (10 개의 병렬 프로세스)으로 실행해야합니다. 로 끝납니다 seq 10 | xargs -n 1 -P 10 echo
.
POSIX 방식
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
x=10
while [ $x -gt 0 ]; do
command
x=$(($x-1))
done
물론 하나의 라이너로 만들 수 있습니다.
x=10; while [ $x -gt 0 ]; do command; x=$(($x-1)); done
가장 이식성이 좋은 방법으로 프로그램을 설치할 가능성이 줄어 듭니다.
다음은 휴대 성이 떨어집니다.
{1..10}
: bash 특정이며 인수가 큰 경우 큰 줄을 생성합니다.seq
: GNUyes
: GNU그리고 이식성에 지치면 GNU를 고려하십시오 parallel
.
sudo apt-get install parallel
seq 100 | parallel echo {}
명령을 병렬로 실행하고 많은 멋진 옵션이 있습니다.
참조 : https : //.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash
sh, zsh, ksh
그리고 bash
잘 대부분의 플랫폼에서 지원됩니다. csh, tcsh, fish
약간의 지원이 있습니다. 또한 parallel --embed
GNU Parallel이 설치되어 있지 않은 다른 시스템으로 쉽게 이동할 수있는 스크립트를 작성할 수도 있습니다.
그것은 'watch'일 것입니다-procps를 사용하는 거의 모든 유닉스 시스템의 일부 여야합니다
시스템에서 fs 변경이나 흥미로운 움직임을 볼 수 있습니다. 예를 들어
watch "df -hP | grep /tmp"
명령을 인수로 입력하십시오 (참조 man watch
).