sed(または他のユーティリティ)を使用して一時スクリプトを生成し、すぐに実行するスクリプトを生成します。

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すべてのスクリプトの内容を内部に貼り付け、保存して実行します。

しかし、今回はこれを自動化し、すべてを1つの入力として貼り付けて所定の位置で実行したかったのです。

つまり、貼り付けでスクリプトを実行するか、一時ファイルに貼り付けてファイルが閉じられたときに「その場で」実行し、最小限のクリックと貼り付けで実行する方法を探しています。 。


この解決策が必要な理由:

複数のサーバー環境を使用している場合は、このプロセスを繰り返すことができるので、これを繰り返し実行して時間を節約したいと思います。

この行為の合法性に関する議論はそれ自体議論です…


例は次のとおりです。プロンプト(アンパサンドを含む最初の項目)に次のコマンドを貼り付け、Nanoと入力してスクリプトを作成し、次のスクリプト構文を貼り付けて保存すると実行されます。このプロセスを自動化したいと思います。これらすべて、1つの貼り付け/一つの作業。

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

ベストアンサー1

つまり、道を探しています。貼り付けでスクリプトを実行する、または一時ファイルに貼り付け、ファイルを保存せずに「所定の位置」で実行します。 --- 最小限のクリックと貼り付けですべてを実行します。

インタラクティブシェルがBashまたは互換シェルであると仮定すると、次のものを探しています。

bash << 'EOT'

<PASTE SCRIPT HERE>

EOT

上記のコードケースは「Heredoc」(「Here document」の略)と呼ばれ、それを使用して新しいサブシェルからEOTまですべてのコマンドを実行します。

これにより、作業ディレクトリを変更したり環境を変更したりできます。 EOTはキーワードではないので、EOTの代わりに希望のフレーズを使用できます。区切られた文書の先頭と末尾でスペルが同じであることを確認してください。

'EOT'親シェルを表すために一重引用符で囲みます。いいえこの資料で代替操作を実行します。たとえば、これは親シェルによる変数の拡張を防ぎますが、子シェルによる変数の拡張は防ぎます。

具体的な例は次のとおりです。

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}

おすすめ記事