2009-07-24 5 views
1

여기 상황은 다음과 같습니다.CYGWIN 앱이 SH 스크립트에 설치되어 있는지 프로그래밍 방식으로 확인할 수 있습니까?

CYGWIN에 RSYNC 명령을 사용하여 웹 사이트를 배포하는 SH 배포 스크립트를 작성했습니다. 설치가 끝나면 개발 팀에 전자 메일을 보내 일부 세부 사항으로 배포했다고 말합니다. 저는 CYGWIN으로부터 메일을 보내기 위해 "exim"을 사용할 것입니다.

사실, exim은 CYGWIN을 설치할 때 선택 사항이며 설치되지 않은 경우 내 SH 스크립트를 종료하고 싶습니다. 응용 프로그램이 스크립트에 설치되어 있으면 UNIX에서 체크인하고 CYGWIN에서 작업 할 수 있습니까?

미리 감사드립니다.

답변

4
# bash script (should also work with sh) 
# someprog must be on the path for type to find it 
if type -p "someprog" 
then 
    echo "it's there" 
else 
    echo "it isn't" 
fi 
+0

감사합니다, 마지막으로 쉽게 보였지만 명령을 몰랐다 : – Amadeus45

0

'which'명령을 사용할 수 있습니다. 프로그램의 위치를 ​​반환하거나 존재하지 않으면 아무것도 반환하지 않습니다.

2

구체적에서 '수출입'설명서로부터, 같은 출력을 제공 내 시그윈에서

Exim version 4.69 #1 built 28-Jan-2008 21:59:08 
Copyright (c) University of Cambridge 2006 
Probably GDBM (native mode) 
Support for: crypteq iconv() PAM OpenSSL Content_Scanning 
Lookups: lsearch wildlsearch nwildlsearch iplsearch dbm dbmnz dnsdb dsearch ldap 
    ldapdn ldapm passwd 
Authenticators: cram_md5 plaintext spa 
Routers: accept dnslookup ipliteral manualroute queryprogram redirect 
Transports: appendfile/maildir/mailstore/mbx autoreply pipe smtp 
Size of off_t: 8 
Configuration file is /etc/exim.conf 

exim -bV 

실행 '수출입 -bv를', '수출입'를 확인하는 ,

이 옵션을 사용하면 Exim이 현재 버전 번호를 쓰게됩니다. 컴파일 표준 출력에 대한 exim 바이너리 번호 및 컴파일 날짜. 또한 사용중인 DBM 라이브러리, 선택적 모듈 (특정 조회 유형), 바이너리에 포함 된 드라이버 및 사용중인 런타임 구성 파일의 이름을 나열합니다.

작동의 일부로, -bV는 Exim으로 하여금 구성 파일 을 읽고 읽도록합니다. 그러나 이는 정적 검사 일뿐입니다. 확장 할 값인 을 확인할 수 없습니다. 예를 들어, 맞춤법이 틀린 ACL 동사 이 검색되었지만 동사의 인수에 오류가 없습니다. -bV만을 사용하여 구성의 모든 오타를 발견 할 수는 없습니다. 몇 가지 사실적인 테스트가 필요합니다. -bh 및 -N 옵션은 동적 테스트 기능을 더 많이 제공합니다 ( ).


typewhich 수표와 비교.

유형은 쉘 내장 명령입니다. 명령으로 사용될 경우 쉘이 이름을 해석하는 방법을 나타냅니다. -p 옵션을 사용하면 명령이 실행 된 경우 실행될 디스크 파일의 이름이 반환됩니다.

은 동일한 bash 알고리즘을 사용하여 PATH 검색에서 주어진 이름으로 실행 파일을 검색하기 만합니다.

누군가가 경로에 같은 이름의 실행 파일을 넣으면 true를 반환합니다. 보안이 중요하다면 스크립트에서 명령을 호출 할 때 더 신중해야합니다.

실행중인 항목을 신중하게 파악하는 것이 좋습니다.
물론 위의 입력을 -bV에 반환하는 exim이라는 쉘 스크립트를 구현할 수도 있습니다. 백그라운드에서 망가진 일 - 편집증의 수준은 무엇입니까?

case $(type -p someprog) in 

    /usr/bin/someprog \ 
    | /bin/someprog \ 
    | /usr/local/someprog) 

     echo "Valid location";; 
    *) 
     echo "Invalid location";; 
esac 
0

당신이 위치의 예상 목록에 실행 파일의 위치를 ​​확인하실 수 있습니다 제기하는 보안 문제를 완화하려면 :)