xDroid's Blog

20.8 别名 (从新手到菜鸟的Linux教程)

其实就是给命令做个缩写~语法是 alias [name]=[value] ,如果只运行 alias 的话就会显示全部的别名替换,比如

$ alias
alias ls='ls --color=auto'
$ 

呃……还是拿我现在在用的 oh-my-zsh 举例子吧……

 alias | wc -l
161
 alias | grep git | wc -l
124

这么多别名有一大半都是为 git 服务的[捂脸]


看到一个好玩的 -='cd -' ,原来 - 表示旧目录的意思啊:

$ pwd
/home/xdroid
$ cd repo
$ pwd
/home/xdroid/repo
$ cd -
/home/xdroid
$ pwd
/home/xdroid

应该是个 shell 都能用。

20.7 输入输出重定向 (从新手到菜鸟的Linux教程)

这个是 shell 的(一部分)精髓吧 所以我几乎每次都会搞错

简单说来就是通过一些保留的符号,操纵命令的输入流、输出流(包括标准输出流和错误输出流)。我们提到过 Unix/Linux 设计哲学是一切都是文件,所以一个命令(进程?)输入、输出都是“文件”;既然是文件那就可以进行重定向。

Read More

20.5 Shell 条件表达式 (从新手到菜鸟的Linux教程)

除了 js 和 c/cpp 的三目操作符 [] ? [] : [] 和 python 的 [val1] if [cond] else [val2] 是的我就是要吐槽它们顺序不一样 ,应该大部分语言的条件表达式只有 if-else 类或者 switch-case 类,那么我们也从这两种看一下 bash 里怎么做条件判断。

if-else

基本语法是

if [ cond1 ]
then
  exp1
elif [ cond2 ]
  exp2
else
  exp3
fi

假设大家都已经掌握了 if-else 结构,这里只强调几个不按常理出牌的地方:

  • 左右方括号周围要有空格,不然就是语法错误(原因接下来说道 test 的时候会分析),比如:
      $ if [ 1 -ne 2 ]; then echo "Surely"; else echo "Math taught by literature teacher."; fi
      Surely
      $ if [1 -ne 2 ]; then echo "Surely"; else echo "Math taught by literature teacher."; fi
      bash: [1: command not found
      Math taught by literature teacher.
      $ if [ 1 -ne 2]; then echo "Surely"; else echo "Math taught by literature teacher."; fi
      bash: [: missing `]'
      Math taught by literature teacher.
    这里我们也展示了如何将 if-else 写在同一行内。
  • 和 matlab 不一样的地方是, if-else 块用 fi 结束,而不是 end (相比之下我觉得还是 matlab 的写法好一点)。
  • 测试条件是返回值等于 0 为真,返回值非零为假(真 TM 奇怪,居然和 VB 差不多

[ 与 test

上面提到了左右方括号两边必须加空格,这是为什么呢?

$ help [
[: [ arg... ]
    Evaluate conditional expression.
    
    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.

这就很有趣了,我们再来看看 test 的帮助:

$ help test
test: test [expr]
    Evaluate conditional expression.
    
    Exits with a status of 0 (true) or 1 (false) depending on
    the evaluation of EXPR.  Expressions may be unary or binary.  Unary
    expressions are often used to examine the status of a file.  There
    are string operators and numeric comparison operators as well.
    
    The behavior of test depends on the number of arguments.  Read the
    bash manual page for the complete specification.

因此 [ 只是 test 的别名,只是最后一个参数必须是 ] ;至于 test 能干嘛,只要知道它测试文件状态、比较字符串或数字就可以了——剩下的,文档都说了 Read the bash manual page for the complete specification 面向 StackOverFlow 编程就可以了

if-else 的简化写法

我们注意到既然条件表达式可以包含命令,那么我们就可以直接把分支中的表达式“接”在做出判断后面;这种技巧是这样实现的:

condition && if_succeed || if_failed

这种语句为什么能够成立留作习题

case-esac 结构

是的,他们又把单词反过来了(手动微笑),举个例子:

$ day="Sat"
$ case $day in
>   Mon | Tue | Wed | Thu | Fri)
>     echo 'Oh no, we have to work today.'
>     ;;
>   Sat | Sun)
>     echo 'Relax!'
>     ;;
>   *)
>     echo 'Sorry aliens.'
>     ;;
> esac
Relax!

别忘了打两个分号。

20.4 Shell 字符串 (从新手到菜鸟的Linux教程)

好的,我抓紧把这个坑填上就可以安利其他有趣的命令了(

我们提到过 shell 是弱类型的语言,除了数字和数组类型以外好像也就字符串类型了。个人感觉用 shell 的时候字符串类型是最多的,因为你看传参数是用字符串,就连循环

for i in `seq 1 10`
do
    ...
done

i 的取值 seq 1 10 都是字符串类型。记得某篇文章说过 Lisp 系统比类 Unix 系统高端之处就在于前者用表传参,而后者是用字符串传参= =

Read More

匪夷所思的 Gurobi 安装

大意是在 Matlab 命令行安装 Gurobi 的时候提示架构不对,看了一下安装文件的源码:

% We don't require GUROBI_HOME on Mac or Linux. Get gurobiarch from path.
gurobiarch = gurobipath;
gurobiarch(end) = [];
slashes = strfind(gurobiarch, fs);
gurobiarch = gurobiarch(slashes(end-1)+1:slashes(end)-1);

关爱智障的眼神。

(解释一下,因为我把 Gurobi 安装到 /opt/gurobi 去了,但是似乎安装程序默认我们应该安装到一个类似于 /***/gurobi752/linux64/ 的地方)


顺便吐槽一下 CVX 。

申请 academic license 的时候需要输入(网卡的)特征编码,但是在我这里的发行版上 cvx_version 并不显示出来……继续读源码:

%%%%%%%%%%%%%%%%
% License file %
%%%%%%%%%%%%%%%%

if isoctave,
    if ~isempty( cvx___.license ),
        fprintf( 'CVX Professional is not supported with Octave.\n' );
    end
elseif cvx___.jver < 1.6,
    fprintf('       WARNING: full support for CVX Professional licenses\n' );
    fprintf('       requres Java version 1.6.0 or later. Please upgrade.\n' );
elseif exist( 'cvx_license', 'file' ),
    cvx_license( args{:} );
end

重下带 gurobi 和 mosek 的 standard 版本,把 cvx_license.p 文件复制过去就可以了。

关爱智障的眼神*2。

语言纯粹主义者的对话 0

纯粹主义者的对话:

A> 你平时使用什么
B> 哦我使用 痛殴
A> 痛殴 是一个好的 ,但是我觉得 玄壳 似乎也不错。我用的是 哦我的玄壳 发行版。
B> 我在 混账中心 看到过这个发行版。有时候我也看到其他人推荐 ,不过我还没试过。毕竟用 造 安装 命令实在是太麻烦了。
A> 你不使用 包管理器 吗?
B> 我使用 吃豆人 ,在 操作系统十 上我会使用 家酿
A> 吃豆人 功能很强大,但是我觉得搜索起来不甚方便;你为什么不试试 酸奶 呢?
B> 唔,可能主要是我平时和 森蚺 打交道比较多。
A> 森蚺 ?那是什么?我只听说过 蟒蛇
B> 森蚺 是一个能够提供 蟒蛇 各类科学计算包的管理器,我感觉很不错。
A> 这样啊……我平时用的比较多的是 丙语言 ,所以对 蟒蛇 不是很熟。
B> 丙语言 ?你用什么 集成开发环境 吗?
A> 我不用 集成开发环境 ,大部分时间我用 崇高编辑器铿锵编译前端 ,有时候在服务器上我会使用 敏捷编辑器
B> 那你用什么写 可移植文档文件 呢?
A> 我一般使用 乳胶语言 ,引用会通过 围兜排版软件 编译插入。
B> 听起来不错。你知道的,用 单词 实在是太不方便了——说起来你试过 降价语言 吗?
A> 啊 降价语言 很不错,写博客什么非常方便,就是表达能力还很有限。
B> 那我还是花点时间学习一下 乳胶 。下次有空可能要在 电报 上请教一下你。
A> 不客气 ^_^

Read More