我正在尝试创建一个更改目录并打印一些内容的别名。
我写了这一行:
alias test="cd ~/Documents/MyDir && echo 'content'"
结果是:
content
~$:~/Documents/MyDir
预期结果是:
~$:~/Documents/MyDir content
答案1
除非添加额外的细节,否则下面的内容对于正在发生的事情来说是一个不错的猜测。
首先,您需要了解以下几件事:
命令
cd
本身在您的示例中不会生成任何输出;请参阅cd
Bash 手册页中的命令,了解生成输出的 2 个条件,但这里都不适用。(您或您的系统管理员可能覆盖了默认设置,因此它确实生成了输出,但我们假设没有。您可以通过运行来检查type cd
;如果看到cd is a shell builtin
,则没有发生覆盖。)当 shell 需要您的输入时,它会发出提示,让您知道它在等您。它打印的内容由名为 的 shell 变量的值决定
PS1
;您可以通过输入 来查看它echo "$PS1"
。您的提示可能类似于以下内容~$:\w
(\w
扩展到您当前的目录;请参阅 Bash 手册页中的 PROMPTING 部分)。
当您输入test
调用别名时会发生什么:
- shell 改变目录(可能不产生任何输出),然后
- 贝壳回应你
content
,然后 - 完成你的指令后,shell 现在会通过打印你的
PS1
变量来提示你输入更多输入。
...这就是您获得意想不到的结果的原因。
test
最后说明: Unix/Linux 中已经有一个命令;运行man test
它来查看它的作用。考虑命名你的别名try
,或者albertotest
。:-)