Shell
如何 sudo 複製文件並使用 shell 腳本將參數傳遞給它
我想使用 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
令牌。