2014-10-19 27 views
0

我想在每次复制文件时使用缩写或将别名设置为目标地址。例如,Shell脚本:在命令后缩短或别名地址

scp <myfile> my_destination 

其中my_destination可能是[email protected]:Documents。所以,我想通过插入类似

alias my_destination = '[email protected]:Documents' . 

修改我的.bash_profile但是,这并不工作,因为my_destination不是命令。

有没有出路?

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

回答

2

由于你陈述的原因(别名定义了整个命令),你不能做你想做的事。但是你可以使用shell功能来关闭:

my_scp() { 
    scp "[email protected]" [email protected]:Documents/. 
} 

然后你可以调用作为

my_scp *.c 

(在双引号使用$ @ shell是黑魔法避免麻烦,如果任意一个文件名由* .c的水珠匹配包含空格)

当然,如果你不希望定义一个函数,你总是可以使用一个shell变量至少节省重复输入:

dest='[email protected]:Documents/.' 
scp *.c $dest 
-1

其原因不起作用是否有围绕=标志的空格。正如所指出的,一个别名必须被称为命令字符串的第一部分。通过导出my_destination然后用$调用它,您更可能得到所需的结果。在~/.bashrc

export my_destination='[email protected]:Documents' 

然后:

scp <myfile> $my_destination 

注:您可能需要在出口提供了一个Documents完整路径。

+0

反正它不起作用,因为别名只能在命令中首先被替换。 – whereswalden 2014-10-19 21:55:34

+0

正确的你,可能是一个出口---修正:) – 2014-10-19 22:01:41

0

你有几个选项。您可以在~/.ssh/config这样设置主机别名:

Host my_destination 
    Hostname 192.168.1.100 
    User hbaromega 

你可以使用这样的:

$ scp myfile my_destination:Documents/ 

注意,你仍然必须指定默认目录。

另一种选择是只把一个环境变量在您的~/.bashrc

export my_destination='[email protected]:Documents/' 

然后,你可以使用这样的:定义一个函数也将工作的

$ scp myfile $my_destination 

BertD的做法。

0

我想这样的作品,而无需使用export,以及因为反正我指定的路径或目标的变量。这样我就可以把我的.basrc或的.bash_profile:

my_destination='[email protected]:Documents/' 

然后

scp <myfile> $my_destination 

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

local_dest='/Users/hbaromega/Documents/' 

然后

mv <myfile> $local_dest 

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