2017-03-20 11 views
0

私はSwift内から特定のターミナル/シェルコマンドを実行する方法をかなり研究してきました。Swiftでターミナル/シェルコマンドを実行するとどうなりますか?

問題は、私が実際に何をしているか分からない限り、実際にはどのコードも実行するのが怖いです。 (私は過去にターミナルコードを実行することに非常に不運がありました)

私はthis questionが見つかりました。どのようにコマンドを実行するかがわかりますが、私は完全にSwiftには新しく、各行は行います。

このコードの各行は何をしていますか?

let task = NSTask() 
task.launchPath = "/bin/sh" 
task.arguments = ["-c", "rm -rf ~/.Trash/*"] 
task.launch() 
task.waitUntilExit() 
+2

記述されています。しかし、ここではシェルを使ってグロブする( '*'を 'rm'を呼び出す前にファイル名のリストに展開しています)。 –

+0

( '〜'をユーザのホームディレクトリに展開することも、シェルが現在行っている作業であり、これを使わずにしようとするならば置き換えなければならないでしょう)。 –

答えて

0

を、私はこの質問を書いていたように、私は私が答えの多くを見つけることができたたので、私は質問を投稿することを決めました私のような他人を助けるためにそれに答える。

//makes a new NSTask object and stores it to the variable "task" 
let task = NSTask() 

//Tells the NSTask what process to run 
//"/bin/sh" is a process that can read shell commands 
task.launchPath = "/bin/sh" 

//"-c" tells the "/bin/sh" process to read commands from the next arguments 
//"rm -f ~/.Trash/*" can be whatever terminal/shell command you want to run 
//EDIT: from @CodeDifferent: "rm -rf ~/.Trash/*" removes all the files in the trash 
task.arguments = ["-c", "rm -rf ~/.Trash/*"] 

//Run the command 
task.launch() 


task.waitUntilExit() 

「/ binに/ SH」のプロセスは、時間のほとんどは、方法によって、それは*シェルを介さず*明示的なARGVを起動することが望ましいのですがより明確にhere.

2
  • /bin/shシェル
  • -cを呼び出し、文字列
  • rm -rf ~/.Trash/*として実際のシェルコマンドを取り、ゴミ箱内のすべてのファイルを削除

-rは、再帰を意味します。 -fは強制を意味します。あなたは、端末にmanページを読むことによって、これらのオプションについての詳細を調べることができます。

man rm 
+1

これは他の多くの言語で 'system(" rm -rf〜/ .Trash/* ")'と全く同じことを指摘するべきでしょう。 –

+0

私はゴミ箱にあるファイルのいくつかを好きです。私はそれを実行してそれらをすべて削除していないことを嬉しく思います。 –

関連する問題