寻觅生命中的那一片浅草......

文章属于类别 Shell

bashrc的加载问题

今天遇到了一个奇怪的问题,CentOS 6.7 64bit,在普通用户(user)的$HOME目录下有一个.bashrc,里面定义了该用户应该有的PATH

  1. 情况一、通过下面的操作可以找到命令
su - user
which cmd
  1. 情况二、通过下面的操作找不到命令
su - user -c 'which cmd'

最后对比了bash版本,发现正常的机器,bash是4.2.10版本,而有问题的机器,是上次bash漏洞,修复了,顺便就升级到4.3,从其他机器拷贝4.2.10版本的bash到该机器,并修改user的登录shell

mkdir /usr/local/bash_4.2
scp ip:/bin/bash /usr/local/bash_4.2/bash
vi /etc/passwd
修改user的登录shell为/usr/local/bash_4.2/bash

测试正常

ZZ:rlwrap解决sqlplus上下键找历史命令

在Linux下面使用sqlplus默认不可以使用上下键查找历史命令,使用起来很不方便,影响效率。不过,可以通过第三方工具rlwrap来解决这个问题。

rlwrap下载:http://utopia.knoware.nl/~hlub/uck/rlwrap/

转载自:rlwrap解决sqlplus上下键找历史命令

当然也适用于Erlang的命令,为其添加历史命令记录

zz:自动补完不算什么,一键直达目录才是终极神器!

在命令行中切换目录是最常用的操作,不过很少有比一遍又一遍重复“cd ls cd ls cd ls ……”更令人沮丧的事情了。如果你不是百分百确定你想要进入的下一个目录的名字,那么你不得不使用ls来确认,然后使用cd来进入你想要进的那一个。所幸的是,现在大量的终端和shell语言提供了强大的自动补全功能来处理该问题。但是,你仍然需要一直疯狂地敲击TAB键来干这事。如果你和我一样懒惰,你一定会对autojump感到惊喜。

autojump是一个命令行工具,它允许你可以直接跳转到你喜爱的目录,而不用管你现在身在何处。

更多请参考:自动补完不算什么,一键直达目录才是终极神器!

Using flock() in Bash without invoking a subshell

我们目前利用了flock来限制并发,通常是用一个小括号把需要执行的代码包含起来,这样就会产生一个子shell,带来的问题是父shell无法获得子shell的返回值,昨天刚好Google到这个文章,在这里贴下。

#!/bin/bash

(
flock -s 200

# … commands executed under lock …

) 200>/var/lock/mylockfile
Unfortunately, this invokes a subshell which has the following drawbacks:

You cannot pass values to variables from the subshell in the main shell script.
There is a performance penalty.
The syntax coloring in “vim” does not work properly. :)
This motivated my colleague zImage to come up with a usage form which does not invoke a subshell in Bash:

#!/bin/bash

exec 200>/var/lock/mylockfile || exit 1
flock -n 200 || { echo “ERROR: flock() failed.” >&2; exit 1; }

# … commands executed under lock …

flock -u 200

原文见:Using flock() in Bash without invoking a subshell

Python+bash下载“不许联想”的mp3

主要是学习Python处理xml的方法
先上一个纯Python的,有问题,部分歌曲下载不到,返回404错误,待解决

2010-12-15
终于找到404的原因了,今天早上回来,又执行了一下脚本,发现能下载的文件名都是没有空格的,而404的则都有空格,对文件名进行了编码,解决了,另外,由于有首歌的歌名有个中文的单引号,故需要将它编码为gbk,才发现Python2.4.3不支持gbk,所以,最后的程序,开头用的是Python2.7.1 ,修改的程序见页面底部

[python]
#!/bin/env python
import os
import urllib
from xml.dom import minidom
import time
download_time=time.strftime(‘%Y%m%d’,time.localtime())
download_path=os.getcwd()+”/”+”wxf”+download_time

if not os.path.isdir(download_path):
os.mkdir(download_path)

usock = urllib.urlopen(‘http://www.wangxiaofeng.net/mp3player.xml’)
xmldoc = minidom.parse(usock)
usock.close()
songlist = xmldoc.getElementsByTagName(‘song’)
for i in range(0,len(songlist),1):
url=songlist[i].attributes[“path”].value.encode(‘utf-8’)
name=songlist[i].attributes[“title”].value
urllib.urlretrieve(url,download_path+”/”+name+”.mp3″)
[/python]

改良下,结合bash处理

[python]
#!/bin/env python
import os
import urllib
from xml.dom import minidom
import time
download_time=time.strftime(‘%Y%m%d’,time.localtime())
download_path=os.getcwd()+”/”+”wxf”+download_time

if not os.path.isdir(download_path):
os.mkdir(download_path)

usock = urllib.urlopen(‘http://www.wangxiaofeng.net/mp3player.xml’)
xmldoc = minidom.parse(usock)
usock.close()
songlist = xmldoc.getElementsByTagName(‘song’)
f=open(‘mp3list.txt’,’w’)
for i in range(0,len(songlist),1):
url=songlist[i].attributes[“path”].value.encode(‘utf-8’)
f.write(url+”\n”)

f.close()

[/python]

[bash]
#!/bin/bash

mkdir /home/python_code/wxf20101214
cd !$
cat /home/python_code/mp3list.txt |while read line
do
wget “${line}”
done
[/bash]

url编码后的程序
[python]
#!/usr/local/python271/bin/python
import os
import urllib
from xml.dom import minidom
import time
download_time=time.strftime(‘%Y%m%d’,time.localtime())
download_path=os.getcwd()+”/”+”wxf”+download_time

if not os.path.isdir(download_path):
os.mkdir(download_path)

usock = urllib.urlopen(‘http://www.wangxiaofeng.net/mp3player.xml’)
xmldoc = minidom.parse(usock)
usock.close()
songlist = xmldoc.getElementsByTagName(‘song’)
for i in range(0,len(songlist),1):
url=urllib.quote(songlist[i].attributes[“path”].value.encode(‘gbk’),safe=”:/”)
name=songlist[i].attributes[“title”].value
urllib.urlretrieve(url,download_path+”/”+name+”.mp3″)

[/python]

2018年十一月
« 2月    
 1234
567891011
12131415161718
19202122232425
2627282930