使用 sed(或任何其他實用程序)創建臨時腳本,以便立即創建腳本以就地執行
我使用
sed
更改現有文件中的文本和 Nano 來創建新文件。我用這種方式更改文本
sed
,例如:sudo sed -i 's/TESTING === "1"/TESTING === "0"/g' /etc/csf/csf.conf
有沒有辦法用它創建文件,而不需要進入 Nano 或 VI 並粘貼文本、授予權限然後執行?
通常我會這樣做
cd ~ && nano script.sh && chmod +x script.sh && ./script.sh && rm -rf script.sh
,然後將所有腳本內容粘貼到其中,然後保存並執行。然而,這一次,我什至想自動化,只需將所有內容粘貼為一個輸入並在適當的位置執行它。
換句話說,我尋找一種從粘貼執行腳本的方法,或者將其粘貼到臨時文件中並在我關閉文件時“就地”執行它,然後以最少的數量執行它點擊和粘貼。
為什麼我需要這個解決方案:
在使用多個伺服器環境時,該過程可能會重複,我想在一次又一次地執行此任務時節省時間。
關於這種行動的合法性的討論本身就是一個粗暴的討論……
這是一個範例 — 我粘貼以下 coomand 來提示(第一個,包括 & 號),進入 Nano 創建腳本,然後,我粘貼以下腳本語法,保存,它正在執行. 我希望通過一個粘貼/一個動作來自動化這個過程來完成所有這些。
cd /home/testo && sudo nano script.sh && sudo chmod +x scripts.sh && sudo ./script.sh #!/bin/bash -x # Basic update and upgrade: sudo apt-get update -y sudo apt-get upgrade -y # Setup CSF-LFD: sudo rm -f csf.tgz sudo wget https://download.configserver.com/csf.tgz sudo tar -xzf csf.tgz sudo sh install.sh sudo perl /etc/csf/csftest.pl sudo sed -i 's/TESTING === "1"/TESTING === "0"/g' /etc/csf/csf.conf sudo csf -r
換句話說,我尋找一種從 paste 執行腳本的方法,或者將其粘貼到臨時文件中並在不保存任何文件的情況下“就地”執行它 — 執行所有內容的點擊和粘貼次數最少.
假設您的互動式 shell 是 Bash 或兼容的 shell - 您正在尋找:
bash << 'EOT' <PASTE SCRIPT HERE> EOT
上面的程式碼實踐叫做“Heredoc”(“Here document”的縮寫),我用它在一個新的子shell中執行直到EOT的所有命令。
這樣,您可以更改工作目錄或更改環境。請注意,EOT 不是關鍵字,因此您可以使用任何您想要的片語來代替 EOT(只要確保 heredoc 的開頭和結尾的拼寫相同)。
周圍的單引號
'EOT'
用於指示父 shell不在heredocument 中執行任何替換。這可以防止例如由父 shell 而不是子 shell 進行的變數擴展。作為一個具體的例子:
sylvain@bulbizarre:~$ bash << 'EOT' echo hello cd / echo We are in ${PWD} EOT hello We are in / sylvain@bulbizarre:~$ # <-- I'm still in my home directory when # back to the interactive shell
換句話說,我尋找一種從粘貼中執行腳本的方法,或者將其**粘貼到臨時文件中並在不保存任何文件的情況下“就地”**執行 — 執行所有內容的點擊和粘貼次數最少.
如果要保留執行命令的副本,可以使用該變體:
sylvain@bulbizarre:~$ tee /tmp/saved.sh << 'EOT' | bash echo hello cd / echo We are in ${PWD} EOT hello We are in / sylvain@bulbizarre:~$ cat /tmp/saved.sh echo hello cd / echo We are in ${PWD}