2014-10-19 63 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命令或函數。