Shell脚本:在命令后缩短或别名地址

时间:2014-10-19 21:23:46

标签: shell scp .bash-profile

我想在复制文件时每次使用时缩写或设置别名到目标地址。例如,

scp <myfile> my_destination 

其中my_destination可以是hbaromega@192.168.1.100:Documents。所以我想通过插入类似

的东西来修改我的.bash_profile
alias my_destination = 'hbaromega@192.168.1.100:Documents' .

但是这不起作用,因为my_destination不是命令。

有出路吗?

注意:我不想缩写整个命令,只想缩写地址,以便我可以将它与其他可能的命令一起使用。

4 个答案:

答案 0 :(得分:2)

由于您声明的原因(别名定义整个命令),您无法执行所需操作。但你可以使用shell函数来结束:

my_scp() {
  scp "$@" hbaromega@192.168.1.100:Documents/.
}

然后您可以将其称为

my_scp *.c

(在doublequotes中使用$ @是shell黑魔法,如果* .c glob匹配的任何文件名包含空格,则可以避免麻烦)

当然,如果你不想定义一个函数,你总是可以使用shell变量来至少保存重新输入:

dest='hbaromega@192.168.1.100:Documents/.'
scp *.c $dest

答案 1 :(得分:0)

你有几个选择。您可以在~/.ssh/config中设置主机名别名,如下所示:

Host my_destination
  Hostname 192.168.1.100
  User hbaromega

您可以像这样使用它:

$ scp myfile my_destination:Documents/

请注意,您仍然需要指定默认目录。

另一种选择是在~/.bashrc中添加一个环境变量:

export my_destination='hbaromega@192.168.1.100:Documents/'

然后你可以像这样使用它:

$ scp myfile $my_destination

BertD定义函数的方法也可行。

答案 2 :(得分:0)

我认为这也可以在不使用export的情况下工作,因为无论如何我都在为路径或目的地分配变量。所以我可以将以下内容放在我的.basrc或.bash_profile中:

my_destination='hbaromega@192.168.1.100:Documents/'

然后

scp <myfile> $my_destination 

同样,我可以为任何本地目的地或目录执行任何操作(例如移动文件):

local_dest='/Users/hbaromega/Documents/' 

然后

mv <myfile>  $local_dest 

总之,目标地址可以作为变量放置,但不能作为shell命令或函数放置。

答案 3 :(得分:-1)

不起作用的原因是=符号周围有空格。正如所指出的,必须将别名称为命令字符串的第一部分。您更有可能通过导出my_destination然后使用$来调用所需的结果。在~/.bashrc

export my_destination='hbaromega@192.168.1.100:Documents'

然后:

scp <myfile> $my_destination

注意:您可能需要在导出中提供Documents的完整路径。