명령 (예를 실행할 수있는 방법이 있나요 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}
.bashrcif {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
기본적으로 watch2 초마다 새로 고침되며 -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 --embedGNU Parallel이 설치되어 있지 않은 다른 시스템으로 쉽게 이동할 수있는 스크립트를 작성할 수도 있습니다.
그것은 'watch'일 것입니다-procps를 사용하는 거의 모든 유닉스 시스템의 일부 여야합니다
시스템에서 fs 변경이나 흥미로운 움직임을 볼 수 있습니다. 예를 들어
watch "df -hP | grep /tmp"
명령을 인수로 입력하십시오 (참조 man watch).