2012-08-17 2 views
0

내가 "화면 -list"불행하게도리눅스 bash는 스크립트는

이미 루프 실패에 모든 프로세스의 이름을 얻으려고, 문자의 첫 번째 occurance 후 문자열을 잘라

for PLINE in `screen -list | grep 'tached)'`; do 
    echo "$PLINE" 
done 
때문에

출력

3698.processname 
(16/08/12 
12:59:37) 
(Detached) 

하지만 내 예상 출력이었다

3698.processname (16/08/12 12:59:37) (Detached) 

은 콘솔에 직접 screen -list | grep 'tached)'을 입력 할 때와 같습니다.

이 루프가 작동했으면 수행하려는 작업은 cut -d '.' -f 2을 사용하고 첫 번째 공백을 찾은 후 결과 문자열을 잘라내는 것입니다. (어떤 방법을 아직 잘 모르겠다. 내가 아는 전부는 %' '이다.)

그래서 나는 bash 스크립트에 단서가별로 없다고 생각한다. 따라서 나는 더 많은 것을 공개하고있다. 임씨가하려고하는 일을하는 우아한 제안.

(편집) 해결 방법 :

for PLINE in `screen -list | grep 'tached)' | awk -F '[ \t\n\v\r.]' '{print $3}'`; do 
    echo $PLINE 
done 
+0

솔루션은 여전히 ​​불필요한 파이프를 사용합니다. grep으로 할 수있는 일은 awk로 할 수 있다는 것을 기억하십시오. – ghoti

답변

0
$ awk -F '[ \t\n\v\r.]' '{print $2}' <<< $'3698.processname (16/08/12 12:59:37) (Detached)' 
processname 

그러나 AWK에 파이프 그렙에 대한 필요가 없습니다; awk가 정규식 자체와 일치하도록하십시오.

+0

빠른 응답을위한 Thx. Tho, 이것이 나를 위해 작동하는지 확인하기 전에, 나는 여전히 루프 대신에 4 줄을 출력해야한다. ^^ – Andy

+0

그것은 쉬운 부분이다. '화면 ... | awk ... ' –

+0

Thx, 내 루프에서 완벽하게 작동했는데, "print $ 2"를 "print $ 3"으로 변경해야했습니다. $ 2는 프로세스 ID를 알려 줬어. – Andy

0

원하는 경우 모두 이름을 입력 한 다음 전체 라인 대신 해당 파일을 가져옵니다.

# screen -list 
There are screens on: 
    85384.ttyv3.filer0 (Attached) 
    85617.another (Detached) 
    57491.pts-0.filer0 (Dead ???) 
Remove dead screens with 'screen -wipe'. 
2 Sockets in /tmp/screens/S-root. 

# screen -list | awk '/ched/{split($1,a,".");print a[2]}' 
ttyv3 another 
# 

변수에 입력 하시겠습니까? for 루프?

# read names <<<$(screen -list | awk '/ched/{split($1,a,".");print a[2]}') 
# echo $names 
ttyv3 another 
# for name in $names; do echo "name=$name"; done 
name=ttyv3 
name=another 
# 

물론, 당신은 순수 bash는이 소음의 대부분을 방지 할 수 있습니다 : 그것은 AWK 또는 그렙 같은 외부 도구에 의존하지 않는

screen -list | while read name status; do 
    if [[ $status =~ ched ]]; then 
    echo "${name#*.}" 
    fi 
done 

이것은 아마 최고의 솔루션입니다. 더 이식 가능하고, 빠르며, 자원 집약적입니다.

+0

두 예제 모두 내 컴퓨터에 "processname (16/08/12 12:59:37) (Detached)"라는 전체 행을 출력합니다. – Andy

+0

아, 내 스크린 이름에 여러 점이있었습니다. 개정 됨 - 다시 확인하십시오. – ghoti

+0

bash 전용 메소드가 추가되었습니다. 필자는 awk 기반 솔루션보다이 방법을 선호합니다. – ghoti