2013-09-28 23 views
1

我有需要時,我與我的一個非交互的shell服務器連接到被採購的功能,但它似乎沒有哪個地方適合。我應該在哪裏放置函數,以便在非交互式ssh會話期間獲取它們?

我希望能夠做到這一點

ssh [email protected] 'my_function' 

我看Why does an SSH remote command get fewer environment variables then when run manually?,發現如果我把一個變量(如HI =「你好」)在我的〜/ .ssh /環境文件我能做到這一點

ssh [email protected] 'echo ${hi}' 

,它會呼應「你好」價值我有點高興,但是,我不能夠把功能的〜/ .ssh /環境文件,因爲它不是那種文件:

的現在,在那裏我可以把我的

function hi { 
    echo 'this is a function' 
} 

因此,這將是一個非交互的shell中源

然後我可以做

ssh [email protected] 'hi' 

,它將輸出「這是一個函數」

+0

你需要把該函數的服務器,因爲它會通過ssh那裏執行......並調用該函數的完整路徑... – iamauser

回答

0

如果你把功能到你的shell RC文件,那就要看你的shell。如果它是bash中,看到以下內容:

https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

最簡單的辦法是把你的功能到一個單獨的文件保存在某個在你家,然後來源它調用函數之前:

ssh [email protected] '. ~/.my_functions.sh; my_function' 

這應該獨立於您從互動會話中調用它而獨立工作。

+0

沒關係,這工作;但是,當我在我的sh文件中使用別名時,它們不適用於我的非交互式shell?但它的工作原理。 – bjorgvin

+0

即使這是有效的,實際上並不需要在我的ssh命令中設置腳本。我已經將BASH_ENV ='$ HOME/script.sh'添加到了我的〜/ .ssh/environment文件中,並且它似乎不是來源的。 有我丟失的東西,因爲這個腳本應該每次 – bjorgvin

+0

當我嘗試將採購SSH [email protected]「如果[-n‘$ BASH_ENV’];然後 。 「$ BASH_ENV」;科幻」我得到的bash:‘$ HOME/script.sh’:沒有這樣的文件或目錄 – bjorgvin

相關問題