쉘 스크립트를 사용하여 파일을 sudo로 복사하고 매개변수를 전달하는 방법

쉘 스크립트를 사용하여 파일을 sudo로 복사하고 매개변수를 전달하는 방법

쉘 스크립트를 사용하여 가상 머신을 설정하고 싶습니다. 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은 쉘 스크립트를 실행하는 사용자($USER)로 대체됩니다. 가장 좋은 해결책은 별도의 파일에 넣은 다음 매개변수를 교체할 때 지정된 위치에 파일을 복사하는 것입니다. 중요한 것은 위치로 인해 붙여넣기 위해 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

하지만 나를 사랑하기 때문에 나는 그것을 성공시킬 수 없었습니다.

답변1

이 작업을 수행하는 더 좋은 방법이 있을 수 있지만 수행하려는 작업을 구체적으로 지정하려면 "여기 문서"를 사용할 수 있습니다.

#!/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토큰으로 사용하고 있습니다.

답변2

예, 문제는 (당신처럼 실행되는) 쉘이 리디렉션을 처리하려고 한다는 것입니다앞으로sudo 명령을 시작합니다.

tee여기서는 훌륭하게 작동합니다.

sed 's/\$1/'"$USER"'/' your_file | sudo tee /some/privileged/file

화면에 출력되는 것을 보고 싶지 않다면 >/dev/null마지막에 추가하세요.

또는 sudo를 사용하여 쉘을 생성할 수 있습니다.

export USER
sudo sh -c 'sed "s/\\\$1/$USER/" your_file > /some/privileged/file'

그러나 우리는 여기서 분명히 지옥을 언급하고 있습니다.

관련 정보