这个化名给我带来了麻烦:
alias dm="git diff master > $dl && subl $dl"如果我运行source ~/.bash_profile,那么它就能工作。但是,如果我只是打开终端,运行dm,而没有先采购,我得到:
-bash: syntax error near unexpected token `&&'如果我重新启动终端后,采购,它不工作了。这里有什么问题?$dl是这样的吗,在bash_profile的末尾定义的:
export dl=~/"Desktop/Diffs/today.diff"(我上的是Ubuntu 12.04。不太可能相关,但即便如此。)
发布于 2016-05-04 23:03:40
定义别名时,变量dl正确为空。它将扩大到:
alias dm="git diff master > && subl "当使用别名时,使用单引号而不是双引号将允许变量展开:
alias dm='git diff master > "$dl" && subl "$dl"'现在,当在命令行上键入dl时,扩展了dm变量:
% dl=hello
% dm -> git diff master > hello && subl hello
% dl=world
% dm -> git diff master > world && subl world还请注意,我在$dl周围添加了引号,以避免分词和全球化。
您可以考虑使用函数而不是别名,IMO别名用于为ls、grep等添加颜色。
alias ls='ls --color=auto'函数用于运行更复杂的命令:
dm() {
git diff master > "$dl"
subl "$dl"
}顺便说一下。许多命令支持-标志,它告诉输入是从stdin开始的,所以下面的命令可能会工作:
dm() {
git diff master | subl -
}发布于 2016-05-04 23:25:17
您已经在dl脚本的末尾定义了.bash_profile。这是否意味着dl是在dm别名之后导出的?
尝试交换这两个命令,以便首先导出dl,然后在设置dm别名时,它将继承dl变量。
它在资源获取后工作的原因是,初始终端登录将来源于dl变量,然后手动source将使用不久前定义的dl变量重置别名。
https://stackoverflow.com/questions/37039121
复制相似问题