是否可以使用 bash shell 腳本自動設定共享主機?

是否可以使用 bash shell 腳本自動設定共享主機?

前言: 以前從未創建過 shell bash 腳本。因此,首先,我什至不確定這是否是適合這項工作的工具。如果不是,請先讓我知道您認為最好的選擇是什麼。

情境: 每次嘗試設定網站時,我經常執行重複的任務。我希望透過執行一兩個命令來自動化這些任務。更新:共享主機是基於 Unix 的。本機是 Mac OS X,也是基於 Unix 的。

作為範例,以下是我經常執行的一些任務(命令):

SCP:

scp ~/local/path/general_web_app/.bash_profile [email protected]:/home/HOSTNAME/.bash_profile

scp ~/local/path/general_web_app/.gitconfig [email protected]:/home/HOSTNAME/.gitconfig

直接SSH:

ssh [email protected] 
cd /www/www/
git init
git add .
git commit -a -m "first commit"
cd ~/private/ && mkdir repos

編輯、尋找、取代儲存並退出:

pico ~/remote/private/repos/general_hub.git/hooks/post-update
replace "user" WITH "hostname";
hit "cmd x"
hit "y"

AFAIK:這些是我希望腳本執行的不同類型的任務。

問題一: bash腳本可以直接處理SCP,SSH,並編輯查找替換儲存並退出嗎?

問題2: 應該向運行腳本的用戶詢問一些參數,並且這些參數應該用於放置在某些文件中(替換現有的特定關鍵字) - 這可以完成嗎?

問題3: 我們應該將文件複製到遠端並直接在遠端編輯,還是應該在本地獲取文件,“在臨時位置本地編輯它們”,然後將它們放在伺服器上?我認為第二個要複雜得多。

有什麼例子我可以看一下嗎?

預先非常感謝

答案1

簡短的回答是:都可以。

我會給你一些例子。以下是在遠端電腦上執行本機 bash 腳本的命令範例:請注意,無需遠端複製它:

   ssh user@remote_pc 'bash -s' < local_file.sh

這非常簡單,可能不值得編寫整個腳本來處理它,但如果您願意這樣做,也可以透過腳本進行安排。不過,要實現此功能,您必須設定passwordless loginssh 連線。如果不這樣做,腳本中的 ssh/scp 命令將停止,等待您輸入遠端使用者的密碼。

至於編輯等,Unix有終極的流編輯器sed,它正是這樣做的:例如,命令

 sed 's/a/A/g' old_file.txt > new_file.txt

將小寫字母替換a為大寫字母A,並將輸出放入新檔案中。這也可以很容易地編寫腳本。

至於參數,shell腳本可以從檔案讀取參數,也可以查詢環境中的某些參數。無需詢問用戶的登入名,

  echo $USER
  whoami

會做到這一點,即使是在腳本內部。家庭住址、echo $HOME等等也是如此。

至於你的第三個問題,我希望我的第一個答案也能回答這個問題:第一個命令允許你將本地編輯的腳本檔案執行到遠端伺服器上,甚至不必將其複製到那裡。

歡迎來到 *Nix 的世界,在這裡你的願望就是我的命令

抱歉,我忘了:這個指令

  export -p | more

將顯示隨處可用的所有局部變數(從技術上講,這些變數已 出口)。

相關內容