标签归档:Shell

dpkg lock解决

当之前运行apt install命令被异常终止时,重新运行apt install将会抛出dpkg lock错误。

执行以下命令将lock解除即可。

sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock

设置bash alias别名及取消

设置bash_alias别名

之前在使用python3的时候有提到过如何将bash的默认python命令切换到python3。具体做法如下:

在用户目录创建 .bash_alias文件

vim ~/.bash_alias

在其中写入别名信息

alias python=python3

执行source命令生效

source ~/.bash_alias

此时执行python命令进入的shell就是python3了。

这样做带来的问题

但是,这样做之后会对虚拟环境产生影响,比如我写了这样一个别名:

alias python=python2.7

即将默认的python以python2.7执行。

那么,我如果创建一个python3的虚拟环境,并在其中执行python命令:

root@localhost:~# virtualenv -p /usr/bin/python3 env
root@localhost:~# . env/bin/activate
(env)root@localhost:~# python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

这里我们看到,所调用的python为2.7.6,即并没有使用虚拟环境中的python3。这就是由于我们手动设定bash_alias的结果

取消别名

取消别名十分简单,在命令行下直接执行unalias命令即可,比如:

(env)root@localhost:~# unalias python
(env)root@localhost:~# python
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

查看所有的alias可以直接键入alias命令

Shell字符串操作

在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快。

$string的长度

${#string}

在$string中, 从位置$position开始提取子串

${string:position}

在$string中, 从位置$position开始提取长度为$length的子串

${string:position:length}

从变量$string的开头, 删除最短匹配$substring的子串

${string#substring}

从变量$string的开头, 删除最长匹配$substring的子串

${string##substring}

从变量$string的结尾, 删除最短匹配$substring的子串

${string%substring}

从变量$string的结尾, 删除最长匹配$substring的子串

${string%%substring}

使用$replacement, 来代替第一个匹配的$substring

${string/substring/replacement}

使用$replacement, 代替所有匹配的$substring

${string//substring/replacement}

如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

${string/#substring/replacement}

如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

${string/%substring/replacement}