嫌长不看版本:
我们的目的是在linux中创建脚本来执行类似这样的操作:ln arm-none-linux-gnueabi-gcc -s arm-linux-gcc。具体做法是在/usr/local/arm/arm-2009q3/bin文件夹中敲下面这行代码生成mk_alias.sh脚本,然后source执行即可。
ls | grep arm-none-linux-gnueabi | sed 's/arm-none-linux-gnueabi-//g' | awk '{printf "ln arm-none-linux-gnueabi-%s -s arm-linux-%s\n", $1, $1}' > mk_alias.sh
以下是正文:
当我们在linux中安装好arm-2009q3的交叉编译器后,进到/usr/local/arm/arm-2009q3/bin文件夹后,我们发现每个编译命令的名字都很长一串,使用起来并不方便,如下图中每个都带了arm-non-linux-gnueabi-前缀:
我们想为他们创建看起来更简洁的符号链接,如arm-linux-,使用ln XXX -s XXX命令即可。
ln arm-none-linux-gnueabi-gcc -s arm-linux-gcc
但是这里的文件太多了,不想一个一个写这些符号链接。所以这里偷懒写个脚本来做。
ls | grep arm-none-linux-gnueabi | sed 's/arm-none-linux-gnueabi-//g' | awk '{printf "ln arm-none-linux-gnueabi-%s -s arm-linux-%s\n", $1, $1}' > mk_alias.sh
这里虽然只有一行代码,但是其实经过了几个步骤,用到了linux下的sed和awk命令。一步一步解释下来就是这样:
1. 先进到/usr/local/arm/arm-2009q3/bin文件夹,执行ls,再把带arm-non-linux-gnueabi-前缀的文件都显示在屏幕上。
2. 使用sed ‘s/XXXX/YYYY/g’命令将具体的指令拿出来供后续的awk使用。比如sed 's/arm-none-linux-gnueabi-//g'的效果就是把arm-none-linux-gnueabi-gcc变成gcc。
3. 使用awk ‘{printf "%s", $1}’实现格式化输出之前拿到的指令(如刚才的gcc),这里指令在awk命令中被认为是$1变量。比如awk '{printf "ln arm-none-linux-gnueabi-%s -s arm-linux-%s\n", $1, $1}'的效果(这里假设$1是gcc)就是输出ln arm-none-linux-gnueabi-gcc -s arm-linux-gcc\n。
4. 将格式化输出的结果保存到mk_alias.sh脚本文件,如下图所示。
最后运行在当前文件夹source mk_alias.sh即可。检查一下结果,这些蓝色的就是刚创建的符号链接了。大功告成!
总结一下吧。
1. sed ‘s/XXX/YYY/g’是将按行将输入内容中的XXX替换成YYY再输出。
2. awk '{printf "FORMAT", $1}'是按行将输入内容按需要的格式FORMAT输出。