前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >bash shell:脚本中修改profile文件更新LD_LIBRARY_PATH的示例

bash shell:脚本中修改profile文件更新LD_LIBRARY_PATH的示例

作者头像
10km
发布2019-05-25 22:35:25
2.9K0
发布2019-05-25 22:35:25
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433743

当我们的一个项目完成,需要在linux下安装,就要写安装脚本,有时还需要修改profile文件修改环境变量。这时就要用到sed编辑器。sed编辑器被称作流编辑器(stream editor),跟普通交互式文件编辑器相反。在交互式编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

于是我们可以利用sed编辑器在安装脚本实现对profile文件的修改。

下面我们以一个实际应用的例子来说明:

我已经有一个叫CASSDK的项目,这个项目没有可执行文件,只是一组动态库文件提供别的应用程序调用(比如java),需要为它写一个安装脚本,脚本的作用是将在将文件复制到指定安装目录,然后修改LD_LIBRARY_PATH变量,将安装目录加入到LD_LIBRARY_PATH变量中,以便java代码进行JNI库加载。

另外还要写一个卸载脚本,在删除安装目录后,同时将profile中的LD_LIBRARY_PATH变量也同步修改。

下面是原始的profile脚本片段

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export LD_LIBRARY_PATH=/usr/local/face/lib:$LD_LIBRARY_PATH

下面是安装脚本片段,在文件末尾添加export语句INSTALL.sh

# 定义安装目录位置的变量
cassdk_path=/home/gdface/cassdk
# 定义要在profile中搜索的行
new_export="export LD_LIBRARY_PATH=$cassdk_path:\$LD_LIBRARY_PATH"
# 将搜索行中转为正则表达式
reg_str="^\s*export\s*LD_LIBRARY_PATH=$cassdk_path:\$LD_LIBRARY_PATH"
# 先用grep查找profile是否已经有了指定的语句,如果有,则就不需要再添加了
if grep -q $reg_str /etc/profile
then
echo $cassdk_path exists in LD_LIBRARY_PATH,skip
else    
    # export LD_LIBRARY_PATH=$cassdk_path:\$LD_LIBRARY_PATH
    echo defined LD_LIBRARY_PATH variable
    # 直接在profile末尾添加新行 
    echo $new_export >> /etc/profile
fi
# 显示export语句
grep $reg_str /etc/profile

INSTALL.sh执行后

profile文件的末尾增加一行export LD_LIBRARY_PATH=/home/gdface/cassdk:$LD_LIBRARY_PATH

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export LD_LIBRARY_PATH=/home/hadoop/workspace/cassdk/release/cassdk_linux_x86_64/bin:/usr/local/face/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/gdface/cassdk:$LD_LIBRARY_PATH

下面是卸载脚本(UNINSTALL.sh)片段,用sed修改profile文件,删除安装脚本添加的export语句

# 定义安装目录位置的变量
cassdk_path=/home/gdface/cassdk
# 将cassdk_path字符串中的特殊字符/和.替换为\/和\. ,以适合正则表达式要求
reg_path=`echo $cassdk_path|sed -r 's/([\/\.])/\\\\\1/g'`
echo delete the line if exist:
echo \"export LD_LIBRARY_PATH=$cassdk_path:\\\$LD_LIBRARY_PATH\"
# 调用sed删除正则表达式指定的行
sed -i_bak -r "/^\s*export\s*LD_LIBRARY_PATH=$reg_path:\$LD_LIBRARY_PATH/d" /etc/profile 
# 正则表达式中/d是指删除 
# -i_bak参数是指在修改profile之前先做一个名为profile_bak的备份。

UNINSTALL.sh执行后脚本中export LD_LIBRARY_PATH=/home/gdface/cassdk:$LD_LIBRARY_PATH这行代码被自动删除

上面的修改是用/etc/profile来示例的,所以需要用root权限执行,当然你也可以用同样的办法修改~/.bash_profile

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年07月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档