首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我不重新来源我的bash_profile,为什么我会从别名中得到语法错误?

如果我不重新来源我的bash_profile,为什么我会从别名中得到语法错误?
EN

Stack Overflow用户
提问于 2016-05-04 22:28:25
回答 2查看 442关注 0票数 1

这个化名给我带来了麻烦:

代码语言:javascript
运行
复制
alias dm="git diff master > $dl && subl $dl"

如果我运行source ~/.bash_profile,那么它就能工作。但是,如果我只是打开终端,运行dm,而没有先采购,我得到:

代码语言:javascript
运行
复制
-bash: syntax error near unexpected token `&&'

如果我重新启动终端后,采购,它不工作了。这里有什么问题?$dl是这样的吗,在bash_profile的末尾定义的:

代码语言:javascript
运行
复制
export dl=~/"Desktop/Diffs/today.diff"

(我上的是Ubuntu 12.04。不太可能相关,但即便如此。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-04 23:03:40

定义别名时,变量dl正确为空。它将扩大到:

代码语言:javascript
运行
复制
alias dm="git diff master >  && subl "

当使用别名时,使用单引号而不是双引号将允许变量展开:

代码语言:javascript
运行
复制
alias dm='git diff master > "$dl" && subl "$dl"'

现在,当在命令行上键入dl时,扩展了dm变量:

代码语言:javascript
运行
复制
% dl=hello
% dm -> git diff master > hello && subl hello
% dl=world
% dm -> git diff master > world && subl world

还请注意,我在$dl周围添加了引号,以避免分词和全球化。

您可以考虑使用函数而不是别名,IMO别名用于为ls、grep等添加颜色。

代码语言:javascript
运行
复制
alias ls='ls --color=auto'

函数用于运行更复杂的命令:

代码语言:javascript
运行
复制
dm() {
  git diff master > "$dl"
  subl "$dl"
 }

顺便说一下。许多命令支持-标志,它告诉输入是从stdin开始的,所以下面的命令可能会工作:

代码语言:javascript
运行
复制
 dm() {
   git diff master | subl -
 }
票数 4
EN

Stack Overflow用户

发布于 2016-05-04 23:25:17

您已经在dl脚本的末尾定义了.bash_profile。这是否意味着dl是在dm别名之后导出的?

尝试交换这两个命令,以便首先导出dl,然后在设置dm别名时,它将继承dl变量。

它在资源获取后工作的原因是,初始终端登录将来源于dl变量,然后手动source将使用不久前定义的dl变量重置别名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37039121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档