2012-09-12 19 views
1

我有通過遠程主機A上的.bashrc文件獲取的函數。 如果我在遠程主機A上使用「which」,我將獲得函數體作爲輸出。 我需要從另一臺主機B通過ssh遠程運行它。 目前,我所有的嘗試都以「命令未找到錯誤」結束。 我已經試過去通過ssh遠程調用shell來源的函數

ssh A "source /home/user/.bashrc && function " 

,這沒有幫助。 也嘗試強制ssh以-t鍵來分配僞tty。兩臺主機上的SHELL都是bash。 主機A上的ssh localhost仍然保持可用的功能狀態。

輸出:

[[email protected] ~]$ which status 
status is a function 
status() 
{ 
    dos -s $* 
} 


[[email protected] ~]$ ssh hostA " source /home/user/deploy/bin/_bashrc && status all " 
ls: : No such file or directory 
bash: status: command not found 
+0

我無法重現這一點。你可以粘貼'ssh set'輸出的相關部分嗎?也就是說,如果'function'在那裏,'SHELL'中有什麼,等等。當你在A上使用ssh localhost,這個問題也會發生嗎? –

+0

完成。答案補充。 –

+0

適用於我(tm)。嘗試將絕對路徑名添加到遠程函數中的所有命令調用中,然後決定是否要指責你的'PATH'。其次,從小開始:定義一個包含最小定義的源文件,例如打印「This is the test function」或類似的測試函數。 – crw

回答

1

基本上,你不能。要做到這一點,您需要複製遠程主機上的源文件並將其發送到那裏。請注意,您的文件也可能在其他一些文件中出現......這幾乎就像在遠程主機上運行本地程序一樣。

+0

我的專業,我糾正了我的問題。 –

+0

基本上,你的改變不會改變任何東西:)我的意思是,你想運行的功能,它存儲在另一個主機(A)上(B)。 –

+0

嗯,我會改寫,我想運行功能,存儲在主機(A),主機(A)從主機(B)。這不可能嗎? –

0

訣竅是讓遠端將包含該函數的文件正確加載到shell環境中。

我發現使用bash,下面的作品... 把你的功能到.bashrc裏面遙控器上:

foo_func() 
{ 
    echo Hello World 
} 

然後在本地端:

ssh [email protected] bash -l -c foo_func

bash -l指示bash作爲登錄shell運行(採購啓動文件),然後-c通知shell執行字符串foo_func