swiftでターミナルコマンドを実行するには?

アハロ・ヴィシンスキー

私はSswiftの初心者です。このプロセスを Swift コードから実行するにはどうすればよいですか?

  1. ターミナル ウィンドウを開く
  2. 実行する cd Desktop/firebase-mac
  3. 実行する npm start

私が実際にやろうとしているのは、Swift コードからクリックして Node サーバーを起動することです。

jm666

完全な例:

  • たとえば、あるディレクトリに移動します Desktop
  • nameswshファイルを作成し、そのファイルに追加します (rtf や doc ではなく、プレーンテキスト)。
#!/usr/bin/env xcrun swift

import Foundation

func shell(launchPath: String, arguments: [String]) -> String {

    let process = Process()
    process.launchPath = launchPath
    process.arguments = arguments

    let pipe = Pipe()
    process.standardOutput = pipe
    process.launch()

    let output_from_command = String(data: pipe.fileHandleForReading.readDataToEndOfFile(), encoding: String.Encoding.utf8)!

    // remove the trailing new-line char
    if output_from_command.characters.count > 0 {
        let lastIndex = output_from_command.index(before: output_from_command.endIndex)
        return output_from_command[output_from_command.startIndex ..< lastIndex]
    }
    return output_from_command
}

let output = shell(launchPath: "/bin/date", arguments: [ ])
print(output)

保存して:

  • ターミナルを開く
  • タイプ cd ~/Desktop
  • 使用する chmod 755 swsh
  • 次のように実行しますswift script./swsh

次のような出力が得られます。

Sat Mar 25 14:31:39 CET 2017

を編集しswshshell(...行を次のように変更します

let output = shell(launchPath: "/usr/bin/env", arguments: [ "date" ])

それを実行すると、再び日付が取得されますが、今は:

  • swsh実行しました/usr/bin/env(引数付きdate)
  • そして、/usr/bin/envコマンドを見つけますdate
  • そしてそれを実行した

次に、 に別のファイルを作成し~/Desktop、名前をfrom_swift.

それに追加

echo "Today's date is $(date)"

ファイルを変更しますswshshell行を次のように変更します

let output = shell(launchPath: "./from_swift", arguments: [ ])

./from_swift- への相対パスを使用することに注意してください.(私たちは~/Desktopディレクトリ内にいます)。swift プログラムを実行します。

./swsh

出力:

2017-03-25 14:42:20.176 swift[48479:638098] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'

もちろん、スクリプトfrom_swift はまだ実行可能ではありません。だから実行する:

chmod 755 from_swift
# and run
./swsh

再びエラー:

2017-03-25 14:45:38.523 swift[48520:639486] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't posix_spawn: error 8'

これは、from_swiftがスクリプト (コンパイルされたバイナリではない) であるため、オペレーティング システムはスクリプトの内容を解釈するバイナリを認識する必要があるためです。これはスクリプトを次のようにshell script編集するためですfrom_swift

#!/bin/sh
echo "Today's date is $(date)"

追加された「shebang」行に注意してください#!/bin/shスウィフト./swsh実行して取得します

Today's date is Sat Mar 25 14:50:23 CET 2017

Horray、あなたはbashから最初のスクリプトを実行しましたswift;)

もちろん、あなたが使用することができます/usr/bin/envshebang、今変更の内容from_swift:たとえばへ

#!/usr/bin/env perl

use strict;
use utf8;
use English;
binmode STDOUT, ":utf8";

printf "The $EXECUTABLE_NAME (ver:$PERL_VERSION) runs me: $0\n";
printf "I ❤️ perl!\n";

を実行する./swshと、次のようになります。

The /usr/bin/perl (ver:v5.18.2) runs me: ./from_swift
I ❤️ perl!

注:ファイル内では何も変更せ./swsh、スクリプト ファイルのみを変更しました./from_swift

上記のすべては、次を使用して行われます。

$ uname -a
Darwin nox.local 16.4.0 Darwin Kernel Version 16.4.0: Thu Dec 22 22:53:21 PST 2016; root:xnu-3789.41.3~3/RELEASE_X86_64 x86_64
$ swift --version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

そのため、任意のスクリプトを簡単に作成して実行できます。したがって、あなたはあなたの~/Desktop/from_swift

#!/bin/sh
cd $HOME/Desktop/firebase-mac
npm start

から直接実行することは可能ですがswsh(Jens Meder が提案しました)、これを使用すると、指定されたスクリプト ファイルから何かを実行する非常に簡単な方法が得られます。

覚えておいてください:process.launch()は次のいずれかを実行します:

  • コンパイルされたバイナリ
  • またはスクリプト ファイル、ただしスクリプト ファイル
    • 必要があります持っているshebang行を
    • を使用して実行可能である必要があります chmod 755 /path/to/script.file

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AndroidStudioでターミナルコマンドを実行する

分類Dev

Jupyterでforループのターミナルコマンドを実行する

分類Dev

ターミナルを開かずにターミナルコマンドを実行する

分類Dev

ターミナルを開かずにターミナルコマンドを実行する

分類Dev

ターミナルを開かずにターミナルコマンドを実行する-Linux

分類Dev

Javaは「|」でdebianターミナルコマンドを実行します

分類Dev

ターミナル起動時にコマンドを実行する(macOS)

分類Dev

C#Linuxでターミナルコマンドを実行する

分類Dev

cocoaアプリでターミナルコマンドを実行する

分類Dev

JavaからターミナルでLinuxコマンドを実行する

分類Dev

ターミナルからtmuxでコマンドを実行する

分類Dev

macosコマンドターミナルでtestngを実行する方法

分類Dev

Linuxのターミナルで実行可能なコマンドをループする方法は?

分類Dev

ターミナルからターミナルコマンドを実行し、ターミナルを閉じる(プログラムを実行したままにする)ことはできますか?

分類Dev

インストールされているターミナルコマンドをJavaで実行するにはどうすればよいですか?

分類Dev

コマンドがターミナルで正常に実行されている間、system()は失敗します

分類Dev

MacbookでAnacondaを実行中にターミナルコマンドを使用する

分類Dev

cronjobでコマンドを実行して、ターミナルに出力を表示する方法

分類Dev

VSCode:各ターミナルが開いた後にコマンドを実行する方法は?

分類Dev

Pythonスクリプト内でターミナルコマンドを実行する方法は?

分類Dev

ターミナルコマンドを実行するランチャーを作成するにはどうすればよいですか?

分類Dev

ターミナルコマンドの前にコマンドを実行する

分類Dev

Linuxターミナルで最後に実行されたコマンドを削除する

分類Dev

youtube-dlの終了後にターミナルでコマンドを実行する

分類Dev

ターミナルでtxtファイルのコマンドラインを実行するにはどうすればよいですか?

分類Dev

ターミナル/コマンドラインから直接Go(lang)コードを実行する方法は?

分類Dev

PHPノンブロッキングでLinuxターミナルコマンドを実行するにはどうすればよいですか?

分類Dev

ノードjsでターミナルコマンドを実行します

分類Dev

迅速なメニューバーアプリでターミナルコマンドを実行するにはどうすればよいですか?

Related 関連記事

  1. 1

    AndroidStudioでターミナルコマンドを実行する

  2. 2

    Jupyterでforループのターミナルコマンドを実行する

  3. 3

    ターミナルを開かずにターミナルコマンドを実行する

  4. 4

    ターミナルを開かずにターミナルコマンドを実行する

  5. 5

    ターミナルを開かずにターミナルコマンドを実行する-Linux

  6. 6

    Javaは「|」でdebianターミナルコマンドを実行します

  7. 7

    ターミナル起動時にコマンドを実行する(macOS)

  8. 8

    C#Linuxでターミナルコマンドを実行する

  9. 9

    cocoaアプリでターミナルコマンドを実行する

  10. 10

    JavaからターミナルでLinuxコマンドを実行する

  11. 11

    ターミナルからtmuxでコマンドを実行する

  12. 12

    macosコマンドターミナルでtestngを実行する方法

  13. 13

    Linuxのターミナルで実行可能なコマンドをループする方法は?

  14. 14

    ターミナルからターミナルコマンドを実行し、ターミナルを閉じる(プログラムを実行したままにする)ことはできますか?

  15. 15

    インストールされているターミナルコマンドをJavaで実行するにはどうすればよいですか?

  16. 16

    コマンドがターミナルで正常に実行されている間、system()は失敗します

  17. 17

    MacbookでAnacondaを実行中にターミナルコマンドを使用する

  18. 18

    cronjobでコマンドを実行して、ターミナルに出力を表示する方法

  19. 19

    VSCode:各ターミナルが開いた後にコマンドを実行する方法は?

  20. 20

    Pythonスクリプト内でターミナルコマンドを実行する方法は?

  21. 21

    ターミナルコマンドを実行するランチャーを作成するにはどうすればよいですか?

  22. 22

    ターミナルコマンドの前にコマンドを実行する

  23. 23

    Linuxターミナルで最後に実行されたコマンドを削除する

  24. 24

    youtube-dlの終了後にターミナルでコマンドを実行する

  25. 25

    ターミナルでtxtファイルのコマンドラインを実行するにはどうすればよいですか?

  26. 26

    ターミナル/コマンドラインから直接Go(lang)コードを実行する方法は?

  27. 27

    PHPノンブロッキングでLinuxターミナルコマンドを実行するにはどうすればよいですか?

  28. 28

    ノードjsでターミナルコマンドを実行します

  29. 29

    迅速なメニューバーアプリでターミナルコマンドを実行するにはどうすればよいですか?

ホットタグ

アーカイブ