2017-01-07 5 views
0

私はswift mac appから端末コマンドを実行しようとしていますが、実際のパスを指定しなくても、端末のようにコマンドを入力してもらいたいです。コマンドを実行して$ PATH変数に指定されているすべてのパスを表示する方法はありますか?

私は.SHファイルを読みたい将来的には、可変

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

システムの$ PATH内の任意のパスから、私はパスを指定するとき、私は、コマンドを実行することができますが、私は自動見つけるのバイナリにそれを必要とします長いスクリプトの場合、すべてのバイナリがデフォルトのパスになるわけではありません。

ありがとうございます!

答えて

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変数を使用して、指定されたユーティリティを見つけ、 はその後、与えられた引数でそれを実行します。別の検索パスを指定するための追加の オプションと、追加の環境変数 があります。

(これはスウィフトのが、MacOSの、多くの他のオペレーティングシステムの機能ではありません。)

ファインダー(ダブルクリック)から起動する場合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

hows、cowsay&fortune:s、出力:env:cowsay:そのようなファイルやディレクトリはありません –

+0

@ Steven.B: "cowsay"とは何ですか? –

+0

これは/ usr/local/bin/cowsayにあるようですが、$ PATH =>/usr/local/bin:/ usr/bin:/ bin:/ usr/sbin:/ sbinと表示されれば、これは私の出力です。最初のパスにはバイナリが含まれていなければなりません:s –

関連する問題