Shell 编程问题,怎么保证脚本的执行环境在没污染的环境下?

2017-04-19 11:06:14 +08:00
 sunjourney

在 shell 里给自己写的程序加了 alias wc=count ,但 count 的用法和 wc 不同 ,另外一个以前写的脚本用到了 wc, 现在执行会报错,它错误地使用了 count 。怎么使使这个以前的脚本一定用的是 wc 而不是我现在的 count 。其实我 tr 也被 alias 到了 tr=translate,也有使用的问题

这段脚本大概是这样:

res=$(echo $0 | grep '^pass' | wc -l | tr -d ' ')

感觉和上下文有关吧?怎么让以前这个程序处在没有加 alias 的环境下呢?

3027 次点击
所在节点    程序员
25 条回复
sunjourney
2017-04-19 14:57:23 +08:00
@rrfeng #19
@momocraft #20
这个功能就是这样,定义了 alias ${prefix}c='git commit',
先用一个 function 将参数给 $prefix ,在 source alias ${prefix}c='git commit'
$prefix 默认是 g ,但用户就是传入 w ,自然就变了了 alias wc='git commit',然后出现问题。
lululau
2017-04-19 15:11:31 +08:00
没记错的话, alias 在 non-interactive shell 里是不会被展示的。。。

man bash | col -b | grep -i 'alias.*interactive'

另外,强制调用 external command:

command my_cmd
vingz
2017-04-19 15:12:39 +08:00
我从来不用 alias ,脚本的话,一次编写,多次执行,所以没必要用 alias 省事吧
vingz
2017-04-19 15:13:18 +08:00
env 可以修改环境变量,并且只对本次命令执行生效,可以解决你的问题
xderam
2017-04-19 15:45:56 +08:00
@sunjourney alias {$prefix}c='git commit' 一个胶水语言别搞那么复杂了,如果真想纠结这个问题。我记得内部命令的执行顺序是第一,然后是 PATH 里的,然后是 alias ?记不太清楚了。可以搞本鸟哥的书看看。
如果是生产环境,别搞那么灵活。小心出现 rm -rf $var 的例子。 自己测试环境无所谓了,写个 if 判断下,或者直接写死吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355828

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX