我想做点什么
alias myls=ls && myls
这给了我一个错误
bash: myls: command not found
奇怪的是,随后的
myls
会在同一会话中得到承认。
您是否知道如何声明在同一命令序列中使用的别名?
答案 0 :(得分:2)
根据bash manual:
关于别名的定义和使用的规则有些令人困惑。 在执行任何输入之前,Bash总是读取至少一个完整的输入行 那条线上的命令。 读取命令时会扩展别名,而不是 什么时候执行。因此,别名定义出现在同一行上 因为另一个命令在读取下一行输入后才会生效。 该行上别名定义后面的命令不受该行的影响 新别名。执行函数时,此行为也是一个问题。别名 读取函数定义时扩展,而不是在执行函数时扩展, 因为函数定义本身就是一个复合命令。作为结果, 在执行该函数之后,函数中定义的别名才可用。 为安全起见,请始终将别名定义放在单独的行中, 并且不要在复合命令中使用别名。
对于几乎所有目的,别名都被shell函数取代。
答案 1 :(得分:1)
alias
必须在单独的一行使用,所以即使这样也不行:
alias myls=ls; myls
这会导致-bash: myls: command not found
错误。
但是,您可以使用function
并在同一行使用它:
myls() { ls "$@"; } && myls
答案 2 :(得分:1)