Swift によるスクリプト作成

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 スクリプトを呼び出す

決断される

おすすめ

転載: blog.csdn.net/qq_14920635/article/details/124500984