来点信仰 用guile scheme,gnu官方指定代言语言。
我在linux环境下写脚本的模式是在repl里跑,然后记录成文件,我比较喜欢用ruby的pry,python的话,jupyter notebook也不错,就是重了点
脚本不是正经代码,我只用他执行一些命令和简单处理下数据,比如数据库初始化,计算csv数据这种非常非常低频的操作,存成文件只是为了留个档案,无论是python,ruby还是bash都完全ok的,真的不用太在意语言,够用就行
嗯嗯
当然是 Haskell 啦w
额,scsh
我从源码编译好了,就是不知道怎么启动啊
scsh好久不更新啊。bash第一选择,python作为备胎写脚本和刷leetcode悄悄用(语法虽然极其简单直觉,但python用户喜欢证明他们自己不简单)
确实,scsh
好像发霉了,6年前就断更了
但是这个scsh
到底怎么启动啊
跟随主流就好了…
如果要用不同的shell解析,脚本开头声明部分就可以写呀,比如:
#!/usr/bin/bash
#!/usr/bin/ksh
#!/usr/bin/env python
然后用bash
ksh
python
之类的放在脚本之前就可以了,比如:
[realasking@mysite ~]$ bash test.sh
在 solaris
, hp-ux
, aix
等用过 csh
, ksh
, bash
等,linux
下 shell
首选 bash
(因为系统自带),简单的事情能用shell
就用shell
,如果只是找个脚本语言的话,个人还是首选 python
,反正常规的事情都能干。
用guix
guix environment --ad-hoc scsh
bash的语法确实很不好记忆。各有用处吧,毕竟确实简洁。非要用bash做大项目就怪不得bash了。
熟练使用bash的难点并不在语法本身,bash的语法其实没有多少。
导致感觉困难的地方来自与两个方面:
一个是linux本身的很多机制,例如环境的继承关系,变量的作用域,管道的概念及灵活运用
第二个来自于,仅仅学会bash是远远不够的,bash的能力是把各个独立的程序组织起来,也就以为这你必须还要熟练掌握各个独立程序的用法,例如:find, grep, sed, awk, ls, curl, wget, head, top, nc, ffmpeg, vlc convert, …换句话说,你掌握了那些命令,你的bash程序才能够多强大。
如果被这些问题困扰,说明对shell的机制了解还不够,对语法还不够熟练。
多用,多练,熟悉之后,你会本能的避开这些“坑”。
再多说句不中听的,哪个计算机语言没有坑呢?那些坑之所以还能成为坑,只是水平不够而已。
那这个问题来举例,如果总觉得这是个坑,那么说明对管道的运行机制还没有真正的理解,没哟搞清楚管道上各个进程之间的stdout/stdin/stderr是如何接起来的,没有搞清楚管道上的各个进程是何时开始运行,何时结束运行,何时会被祖塞都没有清晰的认识。
如果把上面这几个问题都搞清楚了,这个“坑”不仅不是“坑”,而且是一个非常强大的机制
这个跟管道没关系,是Bash自己把命令放在子shell中运行导致的。 同样的代码在ksh中是没有问题的。
当然就像你说的,这种东西踩过一次也就会避开了,甚至会加以利用。但是对于初学者来说这个机制是很反直觉的,也是很难排查的。
另外,我至今都不知道bash调试的正确姿势到底是什么…
bash -x
简单点的任务用 bash/zsh/sed/gawk/miller 解决,复杂点的用 Perl,如果想写得舒服点用 Ruby