a-Shell為一款開源的iOS終端機APP,由Nicolas Holzschuch開發,用途十分豐富,內建多種常用命令行工具,例如vim、git、ssh、sftp、unrar、wakeonlan、ffmpeg、ImageMagick、texlive、json2csv、nslookup。由於a-Shell支援iOS捷徑,這些指令可以寫成一連串自動化操作。
此外a-Shell還內建各種程式語言的工具,包括C/C++(編譯後透過wasm執行)、Perl 、Lua、JavaScript、Python,甚至還可以在iOS執行網頁版的Jupyter Notebook伺服器,用圖形界面寫Python程式。
a-Shell設計上有點像Android的 Termux,套件都是針對iOS原生編譯的,而非 iSH Shell那樣模擬Linux環境再轉譯成iOS system call,所以執行速度比較快。
但相對的,a-Shell能裝的套件比較少,得要作者自行提供,不像iSH Shell有Alpine Linux的上游套件庫能用。pip能裝的套件也得是純Python寫成的,無法任意安裝其他C語言寫成的Python函式庫。
1. a-shell基本用法#
# 黑底白字
config -b #000000 -f #FFFFFF
# 儲存變更
config -gp
a-Shell的預設殼層為
dash
,而非bash或zsh。a-Shell的指令跟Linux類似,使用ls指令列出檔案;mv指令移動檔案;cp指令複製檔案;rm指令刪除檔案。要查看可用指令,輸入
help -l
若要安裝更多套件,輸入
pkg search
列出線上套件(跟內建的指令不同,這裡的套件都是用wasm編譯的)再用
pkg install <套件名稱>
安裝,例如裝git就是:pkg install git
2. 尋找a-shell的檔案#
a-Shell的「家目錄」就是~/Documents
,每次a-shell開啟的時候都會自動定位到這裡。由於iOS的限制,在此之上的其他目錄無法寫入。
你可以在iOS的檔案APP → 我的iPhone→ a-shell的資料夾找到家目錄下全部的檔案
3. a-Shell與iOS互動的指令#
a-Shell內建了一些工具指令:
pickFolder
:暫時掛載其他APP資料夾的檔案,不會複製過來
downloadFile
和downloadFolder
:如果掛載的是iCloud資料夾,此指令會強迫iCloud將檔案立即下載到本機。
open <檔案路徑>
:開啟檔案分享視窗,將該檔案分享給其他APP使用
view <檔案路徑>
:預覽PDF或HTML檔案。
play <檔案路徑>
:播放影音檔案
internalbrowser <網址>
:開啟瀏覽器
newWindow
:開啟新視窗
4.a-Shell使用例#
搭配iOS捷徑使用#
在iOS的捷徑APP,可以呼叫a-Shell執行指令,例如執行一個Python程式指令稿,或者輸入/輸出檔案。
這裡有個不錯的範本,整合了yt-dlp與gallery-dl的功能,透過a-Shell執行指令下載影片或圖片。
SW-DLT. A Shortcuts front end for yt-dlp and gallery-dl
安裝pip套件#
- 我們嘗試用a-Shell內建的pip裝
yt-dlp
套件吧,這工具可以用來下載Youtube影片
pip install yt-dlp
- 嘗試下載一部影片,之後可以用檔案APP取出來。
yt-dlp "https://www.youtube.com/watch?v=IZ8-K3YPVN0"
跑Jupyter Notebook#
- 不需用pip安裝,這個指令已經內建。執行以下指令啟動伺服器
jupyter-notebook
- 接著開啟其他瀏覽器APP(為防止iOS殺背景程式,建議用滑動置前或幕前調度叫出來),輸入螢幕上顯示的
https://localhost:8888/tree?=
開頭的網址,開啟網頁界面
編譯執行C語言程式#
a-Shell僅提供Clang,沒有GCC。C語言程式得編譯成WebAssembly(wasm)格式才能執行。
- 安裝LLVM
pkg install llvm
- 用vim新增範本檔案
vim helloworld.c
- 填入以下內容
#include <stdio.h>
int main(void) {
printf("Hello! World!");
return 0;
}
- 利用Clang編譯成wasm
clang helloworld.c -o testc
- 之後執行,看看有無輸出結果
./helloworld