写属于你的命令行(CLI)工具
可执行文件 我们在平时使用Linux和类Linux的终端时,一般对一些系统指令的使用觉得十分自然,比如查看当前目录下的文件:1
2
/usr » ls xana@localhost
X11 X11R6 adic bin lib libexec local sbin share standalone
一些非系统指令更是能让我们的操作如鱼得水。
1
2
3
4
5
6
7
8
9
10
11
12
13
~/Documents/lua » tree xana@localhost
.
├── a.lua
├── b.lua
├── f.lua
├── for.lua
├── hw.lua
├── local.lua
├── recursion.lua
├── snake
└── table.lua
1 directory, 8 files
我们知道可以通过编译执行脚本文件1
2
~/Documents/lua » lua hw.lua xana@localhost
hello world!
也可以通过改变文件权限把文件直接变成可执行文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
~/Documents/lua » chmod a+x hw.lua xana@localhost
------------------------------------------------------------
~/Documents/lua » l xana@localhost
total 80
drwxr-xr-x 12 xana staff 408B 11 2 16:09 .
drwx------+ 42 xana staff 1.4K 11 2 11:01 ..
-rw-r--r--@ 1 xana staff 6.0K 9 11 10:33 .DS_Store
-rw-r--r-- 1 xana staff 31B 9 10 23:34 a.lua
-rw-r--r-- 1 xana staff 34B 9 10 23:37 b.lua
-rw-r--r-- 1 xana staff 58B 9 11 00:01 f.lua
-rw-r--r-- 1 xana staff 91B 9 11 00:28 for.lua
-rwxr-xr-x 1 xana staff 41B 11 2 16:09 hw.lua
-rw-r--r-- 1 xana staff 86B 9 11 00:03 local.lua
-rw-r--r-- 1 xana staff 152B 9 11 00:43 recursion.lua
drwxr-xr-x 2 xana staff 68B 9 11 10:32 snake
-rw-r--r-- 1 xana staff 45B 9 11 01:03 table.lua
------------------------------------------------------------
~/Documents/lua » ./hw.lua xana@localhost
hello world!
-rwxr-xr-x 就表示现在此文件可以执行了。
当然文件中需要加上一行用于脚本解释器 hw.lua1
2
#!/usr/bin/env lua
print ("hello world!" )
但是我们现在只能通过
这种 路径/文件 方式执行文件,要是我想通过文件名直接执行文件怎么办?
我们尝试1
2
3
4
5
6
7
8
9
10
~/Documents/lua » where ls xana@localhost
ls: aliased to ls -G
/bin/ls
------------------------------------------------------------
~/Documents/lua » where cd xana@localhost
cd: shell built-in command
/usr/bin/cd
------------------------------------------------------------
~/Documents/lua » where mkdir xana@localhost
/bin/mkdir
发现一些系统级命令存在于 /bin 和 /usr/bin 目录下,进入文件夹后发现其内容无法进行更改,这些命令数量有限,受到系统的保护。 然后我们尝试一些非系统级命令。1
2
3
4
5
~/Documents/lua » where node xana@localhost
/usr/local/bin/node
------------------------------------------------------------
~/Documents/lua » where tree xana@localhost
/usr/local/bin/tree
我们把脚本文件移动至 /usr/local/bin 文件夹中1
~/Documents/lua » mv hw.lua /usr/local/bin
发现可以执行了。1
2
~/Documents/lua » hw.lua xana@localhost
hello world!
其实文件并不需要文件名,可去掉后缀名。1
2
~/Documents/lua » hw xana@localhost
hello world!
我们总结一下全过程 1、新建一个脚本文件,文件名为你想要执行的脚本名称 2、脚本首行添加一行 脚本解释器目录 3、次行开始写脚本语言 4、修改文件权限,变成可执行文件 5、将文件移动至 /usr/local/bin
实际上我们查看系统环境变量1
2
~/Documents/lua » env $PATH xana@localhost
env: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Server.app/Contents/ServerRoot/usr/bin:/Applications/Server.app/Contents/ServerRoot/usr/sbin:/Users/xana/Documents/quick-3.5/templates:/Users/xana/Documents/quick-3.5:/Users/xana/Documents/quick-3.5/tools/cocos2d-console/bin: No such file or directory
发现它是按照这个顺序查找路径的。所以覆盖等问题转换为路径优先问题。
——————————11.10更新——————————-
从上次听了东豪的讲座之后,发现其实过程5是有更好的替代方案的,就是把脚本路径添加到系统环境中去,比如当前的路径是url,则执行1
export PATH=$PATH: /url/
这样就可以直接在/url/中执行了脚本文件了(临时 想要永久加入系统环境的话,把这句话加到 /etc/profile 中。记得使用管理员权限