如何创建可与普通bash命令结合使用的“字符串”别名?

时间:2019-10-03 00:44:58

标签: linux bash

假设我已经定义

alias scpatoz='scp -r abcdefghijklmnopqrstuvwxyz@helloworld.com'

在我的~/.bash_profile中。但是有时我想将abc@helloworld.com中的a目录复制到我的计算机上。通常我会这样做:

scp -r abcdefghijklmnopqrstuvwxyz@helloworld.com:/home/a .

这需要很长时间才能输入。

如何定义别名(上面的定义不起作用),以便我可以做类似的事情

scpatoz:/home/a .

?然后当想要复制其他目录时,我也可以这样做:

scpatoz:/home2/b .

4 个答案:

答案 0 :(得分:0)

输入别名scpatozscpatoz:/home/a .,然后按 Ctrl + Alt + E 将其展开,在运行命令之前。

答案 1 :(得分:0)

您可以将命令转换为脚本:

脚本名称(al.sh):

#!/bin/bash
scp -r abcdefghijklmnopqrstuvwxyz@helloworld.com:$1 .

然后创建一个别名,如:

alias scp="sh al.sh"
chmod +x al.sh        # Give execute permission

您可以像这样运行该别名:

scp /home/a

这将创建如下所示的命令并运行:

scp -r abcdefghijklmnopqrstuvwxyz@helloworld.com:/home/a .

通过这种方式,您给scp命令提供的任何值(如上述案例/home/a一样,都将替换$1的值并运行scp命令。

答案 2 :(得分:0)

您可以使用一个小的函数,例如:

scpatoz()
{
    if [ $# -eq 1 ]; then
        scp -r abcdefghijklmnopqrstuvwxyz@helloworld.com:$1 .
    elif [ $# -gt 1 ]; then
        scp -r abcdefghijklmnopqrstuvwxyz@helloworld.com:$@
    else
        echo "Needs argument"
    fi
}

然后您可以运行scpatoz /home/a或添加另一个参数来指定目标位置

答案 3 :(得分:0)

以变量名开头,例如 atozhost='abcdefghijklmnopqrstuvwxyz@helloworld.com'

现在您可能会喜欢打字 scp -r $ {atozhost}:/ home / a。

当您希望它更短时,使类似@Lepr的功能得到回答。在函数中使用变量atozhost。我不会使用函数,而是查看命令历史记录并编辑命令(使用箭头键或CONTROL-R并开始键入rcp)。