Shell

如何 sudo 複製文件並使用 shell 腳本將參數傳遞給它

  • November 4, 2019

我想使用 shell 腳本來設置我的虛擬機。範例 script.sh 有

pip install wheel
pip install cookiecutter
pip install flask 
pip install gunicorn
pip install uwsgi

然後我希望它在位置 /etc/systemd/system/website.service 上創建一個服務文件,其中包含以下內容:

[Unit]
Description=Gunicorn instance to serve website
After=network.target

[Service]
User=$1
Group=www-data
WorkingDirectory=/home/$1/website
Environment="PATH=/home/$1/website/venv/bin"
ExecStart=/home/$1/website/venv/bin/gunicorn --workers 3 --bind unix:website.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

在哪裡 $ 1 gets replaced by the user( $ USER) 執行 shell 腳本。最好的解決方案是如果我將它放在一個單獨的文件中,然後在替換參數時將文件複製到指定位置。重要的是,由於位置的原因,這要求在粘貼時使用 sudo。

就像是:

pip install wheel
pip install cookiecutter
pip install flask 
pip install gunicorn
pip install uwsgi
sudo echo file_containing_text.txt $USER > /etc/systemd/system/website.service

但為了我的愛,我無法讓它發揮作用。

可能有更好的方法來做到這一點,但要具體實現你想要做的事情,你可以使用“here document”:

#!/bin/bash
pip install wheel
pip install cookiecutter
pip install flask 
pip install gunicorn
pip install uwsgi
sudo cat > /etc/systemd/system/website.service << EOF
[Unit]
Description=Gunicorn instance to serve website
After=network.target

[Service]
User=${USER}
Group=www-data
WorkingDirectory=/home/${USER}/website
Environment="PATH=/home/${USER}/website/venv/bin"
ExecStart=/home/${USER}/website/venv/bin/gunicorn --workers 3 --bind unix:website.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target
EOF

之間的一切<< TOKEN,只有一行TOKEN是文件;在我的範例中,我用作EOF令牌。

引用自:https://unix.stackexchange.com/questions/550146