Swift によるスクリプト作成
通常、自動化または一般的な処理のためのスクリプトを作成するときは、Shell 言語を使用しますが、Swift 言語のユーザーとして、Swift はスクリプトを作成するためのスクリプト言語としても使用できることを知っておく必要があります。
スフィットを選ぶ理由
- iOS 開発者のスクリプト開発の難しさを軽減
- Swift の高水準言語機能を利用する
- Swift ライブラリを簡単に呼び出す
- iOS Mac でスクリプトをより便利に処理する
こんにちは世界
実際、Swift スクリプトとシェル スクリプトのプロセスはほぼ同じですが、記述言語が異なります。
Swift スクリプトを書く
単純な hello world の出力から始めましょう
helloworld.swift ファイルを作成し、インタープリター\#!/usr/bin/env swift
または\#!/usr/bin/swift
#!/usr/bin/env swift
import Foundation
func sayHelloWorld() -> Void {
print("hello world")
}
sayHelloWorld()
ファイルを実行可能に変更します
通常、swift ファイルには実行権限がなく、ファイル権限を実行可能に変更する必要があります。chmod u+x helloworld.swfit
Swift スクリプトを実行する
シェル スクリプトを実行するのと同じように、ファイル ディレクトリに cd して実行します./helloworld.swift
Swift スクリプトがシェル スクリプトを呼び出す
Swift スクリプトでは、シェル スクリプトをProcess
を通じて、次のメソッドを定義する必要があります。
/// 执行 Shell 命令 (会等待执行完成)
/// - Parameters:
/// - command: 命令
/// - path: 路径 默认为 "/bind/bash",即 shell 脚本
/// - Returns: 运行结果和命令执行标准输出
func shell(_ command: String, at path: String = "/bin/bash") -> (status: Int, results:String) {
let task = Process();
task.executableURL = URL(fileURLWithPath:path)
var environment = ProcessInfo.processInfo.environment
environment["PATH"] = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
task.environment = environment
task.arguments = ["-c", command]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = String(data: data, encoding: String.Encoding.utf8)!
task.waitUntilExit()
pipe.fileHandleForReading.closeFile()
return (Int(task.terminationStatus),output)
}
呼び出し例
他のシェル スクリプトを呼び出す
print(run_shell(launchPath: "./helloShell.sh").results)
コマンドを呼び出す
let pwd = shell("pwd").results
print(pwd)
サード パーティのライブラリ フレームワーク、サード パーティのライブラリは、コマンド ラインが必要な場合やプロジェクト レベルの必要がある場合に使用できますが、メンテナンスやその他のシステムのサポートが必要です。
SwiftShell は、コマンドの実行と出力の処理、非同期での実行、コンテキストの変更、エラー処理、ファイルの読み取りと書き込みなどをサポートしています。
ShellOut を使用すると、シェル コマンドを 1 つのファイルだけで簡単に実行できます
コードヒントテクニック
編集用に新しい Swift ファイルを直接作成すると、書き込みプロセス中にコード プロンプトを実行できず、実行効果や警告エラーが表示されない場合があります。Swift スクリプトを作成するのに便利な環境はどれですか?
私は Storyboard の使用に慣れており、Mac で Black をテンプレートとして選択し、最初にインタープリターをコメントアウトしてから、テストまたはスクリプトのメインプロセスに使用できる start メソッドを定義します。
テストが完了したら、スクリプト ファイルにコピーします。
//#!/usr/bin/env swift // 先注释,以便无法运行和编译
import Foundation
start()
func start() {
sayHello()
let echoStr = shell("echo \"李好\"").results
print(echoStr)
}
func sayHello() -> Void {
print("hello Swift")
}
/// 执行 Shell 命令 (会等待执行完成)
/// - Parameters:
/// - command: 命令
/// - path: 路径 默认为 "/bind/bash",即 shell 脚本
/// - Returns: 运行结果和命令执行标准输出
func shell(_ command: String, at path: String = "/bin/bash") -> (status: Int, results:String) {
let task = Process();
task.executableURL = URL(fileURLWithPath:path)
var environment = ProcessInfo.processInfo.environment
environment["PATH"] = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
task.environment = environment
task.arguments = ["-c", command]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = String(data: data, encoding: String.Encoding.utf8)!
task.waitUntilExit()
pipe.fileHandleForReading.closeFile()
return (Int(task.terminationStatus),output)
}
パラメータを取得するSwiftスクリプト
まず、スクリプトのパラメータを取得するためのシェルに慣れましょう. スクリプトの形式は$nです. nは数値を表し、0は実行されたファイルの名前 (ファイル パスを含む)、1 はスクリプトを実行する最初のパラメーター、2 はスクリプトを実行する 2 番目のパラメーターなどです。
Swift は CommandLine.arguments でパラメーターが渡され、ルールは Shell に似ています
CommandLine.arguments[0] //文件名
CommandLine.arguments[1] //第一个参数
参考
Swift で CLI ツールを作成するための入門チュートリアル
シリーズの作成から開発、テストまで。
Swift スクリプトとコマンド ライン引数
Swift コマンドラインの作成方法とパラメーターの取得方法
スクリプト作成に Swift を使用する
Swift を使用してスクリプトの例を記述します。次のような多くのサンプル プロジェクトがあります: パラメータの取得方法、標準入力と出力 (stdin、stdout、stderr)、Progress/Pipe の使用、コマンドの処理と他のコマンドの結果処理の受信、入力コマンド行の取得は、exit(1)
途中でスクリプトを終了するを使用します。
シェルが Swift スクリプトを呼び出す
決断される