<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style>
</head>
<body><div>Swift is a great shell scripting language except for it's lack of any API to execute UNIX commands. Compare these two shell scripts:<br></div>
<div><br></div>
<blockquote type="cite"><div>#!/usr/bin/php<br></div>
<div>&lt;?<br></div>
<div><br></div>
<div>$files = `find ~/Desktop -name *.png`;<br></div>
<div><br></div>
<div>foreach (explode("\n", $files) as $file) {<br></div>
<div>&nbsp; // do something with $file<br></div>
<div>}<br></div>
</blockquote><div><br></div>
<div>-<br></div>
<div><br></div>
<blockquote type="cite"><div>#!/usr/bin/swift<br></div>
<div><br></div>
<div>import Foundation<br></div>
<div><br></div>
<div>let process = Process()<br></div>
<div>process.launchPath = "/usr/bin/find"<br></div>
<div>process.arguments = [<br></div>
<div>&nbsp; NSString(string:"~/Desktop").expandingTildeInPath,<br></div>
<div>&nbsp; "-name",<br></div>
<div>&nbsp; "*.png"<br></div>
<div>]<br></div>
<div><br></div>
<div>let output = Pipe()<br></div>
<div>process.standardOutput = output<br></div>
<div><br></div>
<div>process.launch()<br></div>
<div><br></div>
<div>let files: String<br></div>
<div>if let filesUtf8 = NSString(data: output.fileHandleForReading.readDataToEndOfFile(), encoding: String.Encoding.utf8.rawValue) {<br></div>
<div>&nbsp; files = filesUtf8 as String<br></div>
<div>} else {<br></div>
<div>&nbsp; files = NSString(data: output.fileHandleForReading.readDataToEndOfFile(), encoding: String.Encoding.isoLatin1.rawValue) as NSString! as String<br></div>
<div>}<br></div>
<div><br></div>
<div>files.enumerateLines { file, _ in<br></div>
<div>&nbsp; // do something with file<br></div>
<div>}<br></div>
</blockquote><div><br></div>
<div>It's a contrived example, I could have used NSFileManager, but I run into this all the time integrating with more complex tools such as rsync.<br></div>
<div><br></div>
<div>Adding my own high level wrapper around the Process command isn't an option since there is no good way to import code from another file when executing swift asa shell script. All your code needs to be in one file.<br></div>
<div><br></div>
<div>- Abhi</div>
</body>
</html>