我曾经使用CShell(csh),它允许您创建一个接受参数的别名。符号有点像
alias junk="mv \\!* ~/.Trash"
在巴什,这似乎行不通。鉴于Bash有许多有用的特性,我会假设这一特性已经实现,但我想知道如何实现。
我曾经使用CShell(csh),它允许您创建一个接受参数的别名。符号有点像
alias junk="mv \\!* ~/.Trash"
在巴什,这似乎行不通。鉴于Bash有许多有用的特性,我会假设这一特性已经实现,但我想知道如何实现。
当前回答
要获取参数,应该使用函数!
然而,$@在创建别名时得到解释,而不是在执行别名期间得到解释,并且转义$也不起作用。我如何解决这个问题?
您需要使用shell函数而不是别名来解决此问题。您可以如下定义foo:
function foo() { /path/to/command "$@" ;}
OR
foo() { /path/to/command "$@" ;}
最后,使用以下语法调用foo():
foo arg1 arg2 argN
确保将foo()添加到~/.bash_profile或~/.zshrc文件中。
在你的情况下,这会奏效的
function trash() { mv $@ ~/.Trash; }
其他回答
另一种解决方案是使用标记,这是我最近创建的一个工具,它允许您将命令模板“书签”,并轻松地将光标放置在命令占位符处:
我发现,大多数时候,我都在使用shell函数,所以我不必在命令行中一次又一次地编写常用命令。在这个用例中使用函数的问题是在我的命令词汇表中添加新的术语,并且必须记住实际命令中的函数参数。标记目标是消除这种心理负担。
为了尊重那些说你不能在别名中间插入参数的人,我刚刚测试了它,发现它确实有效。
alias mycommand = "python3 "$1" script.py --folderoutput RESULTS/"
然后,当我运行mycommandfoobar时,它的工作方式就好像我用长手键入了命令一样。
Bash别名绝对不接受参数。我只是添加了一个别名来创建一个新的react应用程序,它接受应用程序名称作为参数。以下是我的流程:
在nano中打开bash_profile进行编辑
nano /.bash_profile
添加别名,每行一个:
alias gita='git add .'
alias gitc='git commit -m "$@"'
alias gitpom='git push origin master'
alias creact='npx create-react-app "$@"'
注意:“$@”接受传入的参数,如“创建我的新应用程序”
保存并退出nano编辑器
ctrl+o to to to write(按回车键);ctrl+x退出
告诉终端使用.bash_profile中的新别名
source /.bash_profile
就是这样!现在可以使用新别名
您所要做的就是在别名中生成一个函数:
$ alias mkcd='_mkcd(){ mkdir "$1"; cd "$1";}; _mkcd'
^ * ^ ^ ^ ^ ^
您必须在“$1”周围加双引号,因为单引号不起作用。这是因为在标有箭头的地方出现引号冲突会混淆系统。此外,在标有星号的位置需要一个空间用于该功能。
具有子命令的解决方案:
d () {
if [ $# -eq 0 ] ; then
docker
return 0
fi
CMD=$1
shift
case $CMD in
p)
docker ps --all $@
;;
r)
docker run --interactive --tty $@
;;
rma)
docker container prune
docker image prune --filter "dangling=true"
;;
*)
docker $CMD $@
;;
esac
return $?
}
使用:
$ d r my_image ...
打电话:
docker run --interactive --tty my_image ...