2017-01-07 7 views
0

내 swift mac 응용 프로그램에서 터미널 명령을 실행하려고하는데 사용자가 실제 경로를 지정하지 않고 터미널에있는 것처럼 명령을 입력하기를 원합니다. 명령을 실행하고 $ PATH 변수에 지정된 모든 경로를 보게하는 방법이 있습니까?

내가 경로를 지정하고 향후

let path = "/usr/bin/killall" 
    let arguments = ["Dock"] 
    let task = Process.launchedProcess(launchPath: path, arguments: arguments) 
    task.waitUntilExit() 

변수 시스템 $ 경로에서 경로에서 바이너리를 자동 찾기에 내가 파일을 .sh로 읽고 싶은 그것을 필요로 할 때 내가 명령을 실행할 수 있습니다

모든 행을 실행하므로 긴 스크립트의 경우 모든 바이너리가 기본 경로에 있지는 않습니다.

감사합니다.

답변

3

env 통해 명령을 실행할 수

env utility argument ... 

예 :

let path = "/usr/bin/env" 
let arguments = ["ls", "-l", "/"] 
let task = Process.launchedProcess(launchPath: path, arguments: arguments) 
task.waitUntilExit() 

env$PATH 변수를 사용하여 지정된 유틸리티를 찾아 후 주어진 인수를 실행한다. 다른 검색 경로를 지정하는 추가 옵션과 추가 환경 변수가 있습니다.

(이 스위프트의하지만, 맥 OS 등 다양한 운영 체제의 기능이 아닙니다.) 파인더 (두 번 클릭)에서 시작했을 때

하면 PATH이 쉘 환경에서 PATH에서 다를 수 있습니다. 필요한 경우 추가 디렉토리를 추가 할 수 있습니다

var env = task.environment ?? [:] 
if let path = env["PATH"] { 
    env["PATH"] = "/usr/local/bin:" + path 
} else { 
    env["PATH"] = "/usr/local/bin" 
} 
task.environment = env 

excelp과 친구들도 $PATH를 사용하여 실행 파일을 찾을 수 있지만, 단지 "원시"C 인터페이스를 제공합니다.

+0

음, cowsay 및 fortune : s, 출력 : env : cowsay : 해당 파일 또는 디렉토리가 없습니다. –

+0

@ Steven.B : "cowsay"란 무엇이며 어디에 있습니까? –

+0

/usr/local/bin/cowsay에있는 것처럼 보입니다. $ PATH =>/usr/local/bin :/usr/bin :/bin :/usr/sbin :/sbin을 echo하면 내 결과입니다. 첫 번째 경로는 바이너리를 포함해야합니다 : s –