Bash 使用当前路径中的值创建shell别名
我想创建一个可以运行的shell别名Bash 使用当前路径中的值创建shell别名,bash,shell,alias,Bash,Shell,Alias,我想创建一个可以运行的shell别名 command ew --constantswitch --anotherconstantswitch <name> 如何创建别名,以便在运行aliasX时它将 从当前路径(提示的最后一个值)中提取名称 将此路径添加到上面的命令并执行 别名可能无法胜任该工作,但函数肯定胜任。请尝试以下代码: myfunc() { command ew --constantswitch --anotherconstantswitch "${PWD##*/}"
command ew --constantswitch --anotherconstantswitch <name>
如何创建别名,以便在运行aliasX
时它将
名称
别名可能无法胜任该工作,但函数肯定胜任。请尝试以下代码:
myfunc() {
command ew --constantswitch --anotherconstantswitch "${PWD##*/}"
}
诀窍是${PWD##*/}
。您知道,自动变量$PWD
正是您运行PWD
时得到的,以及Bash的内置字符串替换${var##pattern}
,它从变量左侧以最大匹配删除pattern
。因此,${PWD###*/}
删除除最后一个斜杠后的名称之外的所有内容,正如您所描述的,这就是您要查找的内容
实际上,函数比别名更通用。如果仍然需要向命令添加额外参数,请在函数内的命令末尾追加$@,这样传递给函数的任何参数都将转发给命令。别名可能无法胜任此任务,但函数肯定可以胜任。请尝试以下代码:
myfunc() {
command ew --constantswitch --anotherconstantswitch "${PWD##*/}"
}
诀窍是${PWD##*/}
。您知道,自动变量$PWD
正是您运行PWD
时得到的,以及Bash的内置字符串替换${var##pattern}
,它从变量左侧以最大匹配删除pattern
。因此,${PWD###*/}
删除除最后一个斜杠后的名称之外的所有内容,正如您所描述的,这就是您要查找的内容
实际上,函数比别名更通用。如果仍然需要向命令添加额外参数,请在函数内的命令末尾追加$@,这样传递给函数的任何参数都将转发给命令。由于您不尝试执行任何涉及参数的操作,因此实际上可以使用别名:
alias aliasX='echo "${PWD##*/}"'
当您使用aliasX
时,这将打印当前目录名。或者,以您的例子:
alias aliasX='command ew --constantswitch --anotherconstantswitch "${PWD##*/}"'
请注意,别名必须用单引号括起来,否则定义别名时,$PWD
将展开,而不是使用别名时展开
对于稍微复杂一点的内容,您应该使用函数而不是别名,如所示。因为您不想做任何涉及参数的事情,所以实际上可以使用别名:
alias aliasX='echo "${PWD##*/}"'
当您使用aliasX
时,这将打印当前目录名。或者,以您的例子:
alias aliasX='command ew --constantswitch --anotherconstantswitch "${PWD##*/}"'
请注意,别名必须用单引号括起来,否则定义别名时,$PWD
将展开,而不是使用别名时展开
对于稍微复杂一点的内容,您应该使用函数而不是别名,如所示。谢谢。如何将此函数绑定到命令?我能做点什么吗?@EmAe当然可以。只需执行
别名xyz=myfunc
。调用函数时不需要括号,只需要定义它。您也可以像任何其他命令一样直接调用该函数:myfunc
@EmAe该函数已经是一个命令了。只需运行myfunc
。(或者,很明显,如果你想要的话,可以将其重命名为xxy
)@EmAe函数不是与别名一起使用的,而是您使用的,而不是别名。谢谢。如何将此函数绑定到命令?我能做点什么吗?@EmAe当然可以。只需执行别名xyz=myfunc
。调用函数时不需要括号,只需要定义它。您也可以像任何其他命令一样直接调用该函数:myfunc
@EmAe该函数已经是一个命令了。只需运行myfunc
。(或者,很明显,如果你想要的话,可以将其重命名为xxy
)@EmAe函数不是与别名一起使用的东西,而是用来代替别名的东西。