bash

TL;DR

本文主要讨论了 bash 数组和利用 Shell Expansion 语法对数组进行操作,由于写了一个很蛋疼的 bash 工具故想把 bash 坑爹的数组语法吐槽一下。

bash 的语法确实反人类,如果有选择余地,尽量不要用 bash 实现超过10行的功能,即使用 Python 写一万个 subprocess 也好过和 bash 的奇妙语法斗智斗勇。

bash 数组基本语法

虽然 bash 没有真正的变量和引用,但是他真的有数组(也许很多人并不知道 bash 其实是有数组的?)

本质上 bash 中的变量都可以认为是字符串而不存在数值类型变量,数值计算实际上也是通过[……]

Read more

shell 脚本如何判断所在目录问题

这是某业务广泛的 QQ 群里的一次讨论,尘光大前辈问起都是怎么获取脚本所在绝对路径。

首先有同学表示可以使用 pwd配合 $0参数,但是很明显脚本执行的时候并不一定在当前 working dir,这就会带来一个明显的问题就是,如果执行的方式是 ./a.sh,那么获取到的$0和 pwd 的结果才是相同的,否则就是不同的:

当然,可以说判断执行的方式,根据判断$0是否是绝对路径等方法可以区分这个情况,但是首先这样就变[……]

Read more

最近遇到一点事,需要开放工作室服务器的网站目录上传文件权限,要求静态网站上传可以即传即用,考虑到简单起见我想到的办法是新建一个用户加入 www-data 组,登录目录设在网站所在目录下,要传网站直接把文件丢上去就行(前提是这些网站都在同一个域名下,不然还需要另外配置 Server)。可是 SFTP 上传的文件都是默认755,原本 vsftpd 可以用户 local_umask 控制上传文件权限,但是坑爹的硬件防火墙封了 FTP 端口,只能通过22端口。但是 SFTP 虽然名字里带 FTP ,但是实际上 SFTP不是由 vsftpd 控制而是由 openssh 控制,SFTP 没有专门的守护进程[……]

Read more