使用寿司(Spook in the Shell)来玩
你好,这是第25天的帖子。
我想要今天用用由Perl 6(nqp)编写的开放源代码项目spitsh玩一下。
spitsh可以编译名为”Spook”的语言,并输出与shell脚本兼容的命令。这个编译器似乎是用nqp编写的。
安装Spitsh
我会使用ZEF。
$ zef install Spit
$ spit eval 'say "hello world"'
安装Docker
-
- 私の環境はDebian Stretchなので、これを前提に進めていきます
まず次のページの手順に従ってdockerを入れてください:
https://docs.docker.com/engine/installation/linux/docker-ce/debian/
その後、sudoじゃなくても実行できるようにするために次の手順を実行してください:
https://docs.docker.com/engine/installation/linux/linux-postinstall/
3.のログアウト&ログインを忘れずに実行しましょう (自分は忘れて若干詰まりました)
执行剧情(的一部分)
在CentOS环境中,如果未安装nc命令,则生成用于执行此操作的Spook程序。
$ spit eval --os=centos '.install unless Pkg<nc>; ok Cmd<nc>,"nc command exists now"'
执行结果:
BEGIN(){
e(){ printf %s "$1"; }
exec 4>/dev/null
installed(){ yum list installed "$1" >&4 2>&4; }
install(){ yum install -y $1 >&4 2>&4; }
exists(){ command -v "$1" >&4; }
exec 3>&1
say(){ printf '%s\n' "$1" >&3; }
note(){ printf '%s\n' "$1" >&2; }
die(){ note "$1" && kill "-TERM" $$ >&4; }
ok(){ test "$1" && say "✔ - $2" || die "✘ - $2"; }
}
MAIN(){
if ! installed nc; then
install nc
fi
ok "$(exists nc && e 1)" 'nc command exists now'
}
BEGIN && MAIN
接下来,让我们尝试在Docker中运行:
$ spit eval --in-docker=centos '.install unless Pkg<nc>; ok Cmd<nc>,"nc command exists now"'
执行结果:
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
85432449fd0f: Pull complete
Digest: sha256:3b1a65e9a05f0a77b5e8a698d3359459904c2a354dc3b25ae2e2f5c95f0b3667
Status: Downloaded newer image for centos:latest
Installing pacakges: nc
warning: /var/cache/yum/x86_64/7/base/packages/libpcap-1.5.3-9.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-4.1708.el7.centos.x86_64 (@CentOS)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
✔ - nc command exists now
执行非Synopsis命令
如果你对此感兴趣,可以查看/doc目录:https://github.com/spitsh/spitsh/tree/master/doc
尽管似乎还有许多未完成的部分,但我们对未来抱有期待。
最后
谢谢所有阅读到这里的读者们,2017年的Perl 6圣诞日历就到此结束了。
同时也非常感谢在忙碌之中为我们撰写投稿的@AnaTofuZ和@debility。