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

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

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


当前回答

另一种解决方案是使用标记,这是我最近创建的一个工具,它允许您将命令模板“书签”,并轻松地将光标放置在命令占位符处:

我发现,大多数时候,我都在使用shell函数,所以我不必在命令行中一次又一次地编写常用命令。在这个用例中使用函数的问题是在我的命令词汇表中添加新的术语,并且必须记住实际命令中的函数参数。标记目标是消除这种心理负担。

其他回答

以下是示例:

alias gcommit='function _f() { git add -A; git commit -m "$1"; } ; _f'

非常重要:

{后和{前有一个空格。有一个;依次在每个命令之后。如果您在最后一个命令后忘记了这一点,您将看到>提示符!参数用引号括起来,如“$1”

另一种解决方案是使用标记,这是我最近创建的一个工具,它允许您将命令模板“书签”,并轻松地将光标放置在命令占位符处:

我发现,大多数时候,我都在使用shell函数,所以我不必在命令行中一次又一次地编写常用命令。在这个用例中使用函数的问题是在我的命令词汇表中添加新的术语,并且必须记住实际命令中的函数参数。标记目标是消除这种心理负担。

有一次我做了一些有趣的项目,我仍然在使用它。它显示了一些动画,而我通过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

看起来像这样

循环动画)

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

这是另一种使用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 <name_of_your_alias>_$argname="<command> $argname"

并使用它(注意“_”后面的空格:

$<name_of_your_alias>_ $argname

例如,cat文件hello.txt的别名:

(别名为CAT_FILE_)$f(是$argname,在本例中是一个文件)

$ alias CAT_FILE_$f="cat $f"

$ echo " " >> hello.txt
$ echo "hello there!" >> hello.txt
$ echo " " >> hello.txt
$ cat hello.txt

    hello there!

测试(注意“_”后面的空格):

CAT_FILE_ hello.txt