それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Swiftをshebang指定でシェルスクリプト起動!?linuxでも

面白げな記事を見つけました。

新・OS X ハッキング! (166) 開発者でなくても「Swift」は便利に使える | マイナビニュース

#!/usr/bin/swift で swift が起動するというのです。

試してみる。Xcode は入っているので、ターミナルから試してみます。

バージョン確認
takuya@Desktop$ swift --version
Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9
takuya@Desktop$

Macで実行してみる

シェルスクリプトとしてSwift を実行してみる。sample.swift ファイルつくって shebang いれて、実行権限をいれる感じですね。

ファイル作って

sample01.swift
#!/usr/bin/swift

import Foundation

let task = Process()


task.launchPath = "/usr/bin/find"
task.arguments = ["."]
task.launch()

task.waitUntilExit()

chmod して

chmod a+x ./sample01.swift

実行

takuya@~$ cd .Trash/
takuya@.Trash$ ~/Desktop/sample01.swift
.
./89-09kotudoro.xls

おおお /usr/bin/find が実行された。 これはシェルスクリプトの代替に pythonruby 使わなくて幸せに慣れそう。node / swift で書くことが出来る。やったね。

どうせならLinuxでも動かしてみる

うちの Debian jessie で swift を動かしてみる。

実験した環境

takuya@:swift$ cat /etc/debian_version
8.6
takuya@:swift$ lsb_release -a
LSB Version:    core-2.0-amd64:core-2.0-noarch:core-3.0-amd64:core-3.0-noarch:core-3.1-amd64:core-3.1-noarch:core-3.2-amd64:core-3.2-noarch:core-4.0-amd64:core-4.0-noarch:core-4.1-amd64:core-4.1-noarch:cxx-3.0-amd64:cxx-3.0-noarch:cxx-3.1-amd64:cxx-3.1-noarch:cxx-3.2-amd64:cxx-3.2-noarch:cxx-4.0-amd64:cxx-4.0-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-3.1-amd64:desktop-3.1-noarch:desktop-3.2-amd64:desktop-3.2-noarch:desktop-4.0-amd64:desktop-4.0-noarch:desktop-4.1-amd64:desktop-4.1-noarch:graphics-2.0-amd64:graphics-2.0-noarch:graphics-3.0-amd64:graphics-3.0-noarch:graphics-3.1-amd64:graphics-3.1-noarch:graphics-3.2-amd64:graphics-3.2-noarch:graphics-4.0-amd64:graphics-4.0-noarch:graphics-4.1-amd64:graphics-4.1-noarch:languages-3.2-amd64:languages-3.2-noarch:languages-4.0-amd64:languages-4.0-noarch:languages-4.1-amd64:languages-4.1-noarch:multimedia-3.2-amd64:multimedia-3.2-noarch:multimedia-4.0-amd64:multimedia-4.0-noarch:multimedia-4.1-amd64:multimedia-4.1-noarch:printing-3.2-amd64:printing-3.2-noarch:printing-4.0-amd64:printing-4.0-noarch:printing-4.1-amd64:printing-4.1-noarch:qt4-3.1-amd64:qt4-3.1-noarch:security-4.0-amd64:security-4.0-noarch:security-4.1-amd64:security-4.1-noarch
Distributor ID: Debian
Description:    Debian GNU/Linux 8.6 (jessie)
Release:    8.6
Codename:   jessie

公式サーバーから swift を持ってくる

ubuntu 14 のものが動いた

wget https://swift.org/builds/swift-3.0.2-release/ubuntu1404/swift-3.0.2-RELEASE/swift-3.0.2-RELEASE-ubuntu14.04.tar.gz \
| tar zxvf - 

REPL でコマンドラインを起動する

Linuxで動きそうなので、せっかくなので対話インターフェースで起動してみる。

./swift-3.0.2-RELEASE-ubuntu14.04/usr/bin/swift

動かす

takuya@:swift$ ./swift-3.0.2-RELEASE-ubuntu14.04/usr/bin/swift
Welcome to Swift version 3.0.2 (swift-3.0.2-RELEASE). Type :help for assistance.
  1> import Foundation
  2> print("Hello Swift Linux")
Hello Swift Linux
  3>

ええ。。。Foundationもあるの。カーソルで戻るなどで若干改行がおかしくなったりするけど問題なさそう。

スクリプトとして実行してみる

ファイル作って

takuya@:swift$ cat  - > sample.swift
#!/home/takuya/swift/swift-3.0.2-RELEASE-ubuntu14.04/usr/bin/swift

import Foundation

let filelist = Task()
filelist.launchPath = "/bin/sh"
filelist.arguments = ["-c", "ls -lS ./"]
filelist.launch()
filelist.waitUntilExit()

実行権限をつけて

takuya@:swift$ chmod 755  sample.swift

実行した

takuya@:swift$ ./sample.swift
合計 115764
-rw-rw-r-- 1 takuya takuya 118528337 12月 14 10:49 swift-3.0.2-RELEASE-ubuntu14.04.tar.gz
drwxrwxr-x 3 takuya takuya      4096  3月  3 16:12 swift-3.0.2-RELEASE-ubuntu14.04
-rwxr-xr-x 1 takuya takuya       226  3月  3 16:34 sample.swift
-rw-rw-r-- 1 takuya takuya       177  3月  3 16:17 test.swift

ちょっと面食らうのが NSTaskProcess でもなく Task だったところかな。

面白い

ちょっとしたシェルスクリプトのファイル操作なども swift で書くことが出来る。プログラミング言語として整ってるので期待したい。Swiftのちょっとしたコードをぱぱっと試せるのは便利ですね。関数の使い方をちょっと試すのに便利そう。内部でコンパイルしてるんだろうけど、、、、