我曾经使用CShell(csh),它允许您创建一个接受参数的别名。符号有点像

alias junk="mv \\!* ~/.Trash"

在巴什,这似乎行不通。鉴于Bash有许多有用的特性,我会假设这一特性已经实现,但我想知道如何实现。


当前回答

这是另一种使用read的方法。我使用这个方法通过名称片段对文件进行暴力搜索,忽略了“拒绝权限”消息。

alias loc0='( IFS= read -r x; find . -iname "*" -print 2>/dev/null | grep $x;) <<<'

一个简单的例子:

$ ( IFS= read -r x; echo "1 $x 2 ";) <<< "a b"
1 a b 2 

注意,这将参数作为字符串转换为变量。可以在引号中使用多个参数,以空格分隔:

$ ( read -r x0 x1; echo "1 ${x0} 2 ${x1} 3 ";) <<< "a b"
1 a 2 b 3 

其他回答

您所要做的就是在别名中生成一个函数:

$ alias mkcd='_mkcd(){ mkdir "$1"; cd "$1";}; _mkcd'
             ^        *      ^  ^     ^  ^         ^

您必须在“$1”周围加双引号,因为单引号不起作用。这是因为在标有箭头的地方出现引号冲突会混淆系统。此外,在标有星号的位置需要一个空间用于该功能。

有一次我做了一些有趣的项目,我仍然在使用它。它显示了一些动画,而我通过cp命令复制文件,因为cp没有显示任何内容,这有点令人沮丧。所以我取了这个别名

alias cp="~/SCR/spiner cp"

这是spiner脚本

#!/bin/bash

#Set timer
T=$(date +%s)

#Add some color
. ~/SCR/color

#Animation sprites
sprite=( "(* )  ( *)" " (* )( *) " " ( *)(* ) " "( *)  (* )" "(* )  ( *)" )

#Print empty line and hide cursor
printf "\n${COF}"

#Exit function
function bye { printf "${CON}"; [ -e /proc/$pid ] && kill -9 $pid; exit; }; trap bye INT

#Run our command and get its pid
"$@" & pid=$!

#Waiting animation
i=0; while [ -e /proc/$pid ]; do sleep 0.1

    printf "\r${GRN}Please wait... ${YLW}${sprite[$i]}${DEF}"
    ((i++)); [[ $i = ${#sprite[@]} ]] && i=0

done

#Print time and exit
T=$(($(date +%s)-$T))
printf "\n\nTime taken: $(date -u -d @${T} +'%T')\n"

bye

看起来像这样

循环动画)

这里是上面提到的彩色脚本的链接。和新的动画周期)

如果您正在寻找一种通用方法来将所有参数应用于函数,而不仅仅是一个或两个或其他硬编码金额,您可以这样做:

#!/usr/bin/env bash

# you would want to `source` this file, maybe in your .bash_profile?
function runjar_fn(){
    java -jar myjar.jar "$@";
}

alias runjar=runjar_fn;

因此,在上面的示例中,我将运行runjar时的所有参数传递给别名。

例如,如果我在那里运行了jar-hi,它最终会在那里运行java-jarmyjar.jar hi。如果我运行jar一二三,它将运行java-jarmyjar.jar一二三。

我喜欢这个基于$@的解决方案,因为它可以处理任意数量的参数。

Bash别名不直接接受参数。您必须创建一个函数。

alias不接受参数,但可以像别名一样调用函数。例如:

myfunction() {
    #do things with parameters like $1 such as
    mv "$1" "$1.bak"
    cp "$2" "$1"
}


myfunction old.conf new.conf #calls `myfunction`

顺便说一句,.bashrc和其他文件中定义的Bash函数可以作为shell中的命令使用。例如,您可以这样调用前面的函数

$ myfunction original.conf my.conf

要具体回答有关创建别名以将文件移动到垃圾箱文件夹而不是删除文件的问题,请执行以下操作:

alias rm="mv "$1" -t ~/.Trash/"

当然,你必须先创建dir~/.Trash。

然后只需发出以下命令:

$rm <filename>
$rm <dirname>