sudo로 두 개의 명령을 실행하는 방법은 무엇입니까?
명령줄에서 두 개의 DB2 명령을 실행할 수 있는 방법이 있습니까?PHP에서 호출됩니다.exec지휘권
db2 connect to ttt(두 번째 명령을 위해 연결을 활성화해야 합니다.db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com'
시도해 봤습니다.
sudo -su db2inst1 db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com'
첫 번째 명령은 올바르게 완료되지만 두 번째 명령은 실패하고 다음 오류 메시지가 표시됩니다.
SQL1024N A database connection does not exist. SQLSTATE=08003
이 작업을 다음과 같이 실행해야 합니다.php사용자. 명령어sudo -u db2inst1 idphp 사용자가 나에게 정확한 출력을 제공합니다.
명령에 대해 다음 예를 참조할 수도 있습니다.
sudo sh -c 'whoami; whoami'
sudo는 셸을 통해 다음과 같은 여러 명령을 실행할 수 있습니다.
sudo-s -- '와미; 와미'뿌리뿌리
명령은 다음과 같습니다.
sudo - udb2inst1 -s -- "db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com '"
sudo 버전이 -s를 가진 세미콜론과 함께 작동하지 않는 경우(특정 옵션으로 컴파일된 경우에는 작동하지 않음),
sudo -- sh -c 'whoami; whoami'
대신 기본적으로 동일한 작업을 수행하지만 셸의 이름을 명시적으로 지정합니다.
인용문을 처리하려면 다음을 수행합니다.
sudo -s -- <<EOF
id
pwd
echo "Done."
EOF
주로 하는 일은:
sudo bash -c 'whoami; whoami'
대체 용도:eval서브셸의 사용을 피합니다.
sudo -s eval 'whoami; whoami'
참고: 다른 답변은 다음을 사용합니다.sudo -s따옴표가 bash로 전달되고 단일 명령으로 실행되기 때문에 실패하므로 eval을 사용하여 따옴표를 제거해야 합니다. eval이 대답이 더 잘 설명됩니다.
명령 내에서 인용하는 것도 더 쉽습니다.
$ sudo -s eval 'whoami; whoami; echo "end;"'
root
root
end;
또한 실패할 경우 명령 실행을 중지해야 하는 경우 세미콜론 대신 이중 앰퍼샌드를 사용합니다.
$ sudo -s eval 'whoami && whoamit && echo "end;"'
root
/bin/bash: whoamit: command not found
그-s저한테는 선택지가 안 통했어요-i했다.
다음은 bash에서 로그 크기를 업데이트하는 방법의 예입니다.
sudo -u [user] -i -- sh -c 'db2 connect to [database name];db2 update db cfg for [database name] using logsecond 20;db2 update db cfg for [database name] using logprimary 20;'
터미널에서 다음을 입력합니다.
$ sudo bash
그런 다음 원하는 만큼의 명령을 작성합니다.유형exit당신이 끝났을 때.
자동화가 필요한 경우에는script.sh파일 작성 및 실행:
$ sudo ./script.sh
약간 관련된 주제로 SSH를 통해 동일한 다중 명령 sudo를 하고 싶었지만 위의 어느 것도 작동하지 않았습니다.
예를 들어 Ubuntu의 경우,
$ ssh host.name sudo sh -c "whoami; whoami"
[sudo] password for ubuntu:
root
ubuntu
여기서 발견된 비결은 명령어를 이중 따옴표로 묶는 것입니다.
$ ssh host.name sudo sh -c '"whoami; whoami"'
[sudo] password for ubuntu:
root
root
작동하는 기타 옵션:
ssh host.name sudo sh -c "\"whoami; whoami\""
ssh host.name 'sudo sh -c "whoami; whoami"'
원칙적으로 이중 따옴표가 필요한데, SSH가 실행되는 클라이언트 셸이 가장 바깥쪽 따옴표 집합을 제거한다고 생각하기 때문입니다.필요에 따라 인용문을 혼합하고 일치시킵니다(예: 변수를 전달해야 함).그러나 YMMV는 특히 원격 명령이 복잡한 경우 따옴표를 사용합니다.이 경우 Ansible과 같은 도구가 더 나은 선택을 할 수 있습니다.
루트 암호를 알고 있는 경우 시도할 수 있습니다.
su -c "<command1> ; <command2>"
위의 답변은 인용문 내에서 인용할 수 없습니다.이 솔루션은 다음과 같습니다.
sudo -su nobody umask 0000 \; mkdir -p "$targetdir"
umask 명령과 mkdir 명령은 모두 'nobody' 사용자와 함께 실행됩니다.
이것은 여러 라인에서 잘 작동하는 깨끗한 솔루션입니다.
sudo bash -c """
id
echo "testing"
"""
언급URL : https://stackoverflow.com/questions/5560442/how-to-run-two-commands-with-sudo
'programing' 카테고리의 다른 글
| MongoDB 나침반: 고유 필드 값 선택 (0) | 2023.05.09 |
|---|---|
| web.config에서 SMTP 설정을 구성하는 방법 (0) | 2023.05.09 |
| .classpath 및 .project - 버전 제어에 체크인하시겠습니까? (0) | 2023.05.04 |
| MVVM을 사용해야 하는 이유 (0) | 2023.05.04 |
| 마지막 커밋을 실행 취소하는 방법 (0) | 2023.05.04 |