前言
- 之前實作
ssh
遠端執行 script 時,如果要在遠端宣告 function 並執行的話,需要用 typeset
/ declare
指定成函數。順便記錄在這篇
說明
遠端執行指令
1
2
3
4
5
|
ssh <remote_server> "<command>"
# e.g. 檢查遠端 server 的時間
# ssh my_remote_test_server "date"
|
- 不過如果要執行比較複雜的工作,先宣告成函數會比較好處理:
1
2
3
4
5
6
7
|
function remote_work () {
echo "hostname: $(hostname)"
date
whoami
# ... etc
}
|
但是,如果比照上面的寫法,直接丟入函數會有問題:
1
2
3
4
5
6
7
8
9
10
|
function remote_work () {
echo "hostname: $(hostname)"
date
whoami
# ... etc
}
# 會出現錯誤 !!
ssh my_remote_test_server "remote_work"
|
typeset / declare
- 解決辦法,就是宣告該字串或指令
remote_work
是一個函數,讓 remote server 能夠正確處理。
→ 用 typeset
或是 declare
指令:
1
2
3
4
|
ssh my_remote_test_server "$(declare -f <span style="font-family: inherit; font-size: inherit; background-color: inherit;">remote_work); <span style="font-family: inherit; font-size: inherit; background-color: inherit;">remote_work"
# OR
ssh my_remote_test_server "$(typeset -f <span style="font-family: inherit; font-size: inherit; background-color: inherit;">remote_work); <span style="font-family: inherit; font-size: inherit; background-color: inherit;">remote_work"
|
其中,-f
指的是
-f:restrict action or display to function names and definitions
也就是先讓 remote server 知道那是一個 function。
至於到底要用 typeset
還是 declare
?
REF