LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 755|回复: 7

怎么在脚本里使用alias?

[复制链接]
发表于 2011-3-3 22:36:01 | 显示全部楼层 |阅读模式
我发现我在环境里定义的alias到了执行脚本的时候都没有了。是不是传不到子进程里?该怎么解决呢?
发表于 2011-3-3 22:59:33 | 显示全部楼层
脚本在运行时会进入到一个子shell中,用户环境里面定义(通常在.bashrc)的一些alias不算是全局变量,故而无法从父shell传到子shell。
回复 支持 反对

使用道具 举报

发表于 2011-3-7 12:20:04 | 显示全部楼层
但有一个简单的方法:在脚本文件中使用.命令,
  1. . ~/.bashrc
复制代码
就可以让脚本使用~/.bashrc中定义的alias了。
dot(.)命令的作用就是在当前shell中执行一个脚本文件
回复 支持 反对

使用道具 举报

发表于 2011-3-7 13:07:08 | 显示全部楼层
这要看你如何执行脚本。
用sh的方式似乎可以。
回复 支持 反对

使用道具 举报

发表于 2011-3-7 13:36:33 | 显示全部楼层
Post by linwhwylb;2130175
这要看你如何执行脚本。
用sh的方式似乎可以。


sh会进入子shell运行,不能传递alias列表
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-3-7 13:54:56 | 显示全部楼层
Post by xushaohua2011;2130172
但有一个简单的方法:在脚本文件中使用.命令,
  1. . ~/.bashrc
复制代码
就可以让脚本使用~/.bashrc中定义的alias了。
dot(.)命令的作用就是在当前shell中执行一个脚本文件

我试了,这个好像不起作用。。。
回复 支持 反对

使用道具 举报

发表于 2011-3-7 14:10:13 | 显示全部楼层
首先,“. xxx”这招是可以的。
但这是糟糕的做法,万一外部alias变更,你的脚本很可能就瘫了。而且你的脚本不是自足的,它依赖于你必须先定义某个特定的alias,这是一个相当差劲的设计瑕疵。
建议你还是在脚本里直接定义alias。
回复 支持 反对

使用道具 举报

发表于 2011-3-9 08:57:03 | 显示全部楼层
alias 的定义是不能如环境变量般, 传到子里面shell里面的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表