다른 사용자로 bash 스크립트 내에서 예상 실행

다른 사용자로 bash 스크립트 내에서 예상 실행

저는 개발 중인 일부 작은 소프트웨어를 설치하기 위해 bash 스크립트를 작성하고 있습니다. 해당 스크립트는 sudo루트로 실행되지만 스크립트에 의해 실행되는 일부 명령은 변수에 이름을 유지하는 일반 사용자로 실행해야 합니다(또는 실행해야 합니다) $userName. 대부분의 명령은 하나의 라이너이며 su -c "/what/ever/command" $userName충분히 잘 작동합니다.

그러나 내가 실행하고 싶지 않은 명령 중 하나는 root나에게 여러 가지를 묻는 것입니다(실제로는 단 한 가지이지만 여러 번: 기존 파일을 덮어써야 하는지 여부). 내가 " "라고 부를 수 있는 명령에는 baaad_command기본 답변을 제공하는 옵션이 없습니다(" --assume-no" 또는 이와 유사한 것이 없습니다).

내가 볼 때 실현 가능한 유일한 옵션은 다음을 사용하는 것입니다.예상하다n\r명령을 실행하고 명령이 출력되고 문자열 마녀가 " "로 시작할 때마다 " "로 응답합니다 . 스크립트 에서 baaad_command가 요청한 횟수만큼 Overwriteno(" "를 의미)로 응답하기를 원합니다.n\r"Overwrite... ? [y/n]"

나는 su,spawn,expect의 다양한 조합을 시도했지만 운이 없었습니다.

이것은 지금까지 나의 마지막 시도입니다.

#!/bin/bash
if [[ -d "$destinationFolder" ]] ; then
    if [[ -n "$userName" ]] ; then
        spawned=$(su -c expect -c "
            spawn baaad_command --user \"foo\" --passwd \"bar\" \"$destinationFolder\"
             expect {
                 Overwrite: { send \"n\r\"; exp_continue }
                 eof { exit }
             }
        " )
    else
        echo "Don't have a non-root username to install baaad_command with. Skipping"
        exit 3
    fi
else
        echo "$destinationFolder directory not found in $(pwd). Can't continue"
        exit 2
fi

다른 200번 시도에 비해 특별한 점은 없습니다. 단지 마지막 시도일 뿐입니다.

어떤 힌트라도 매우 감사하겠습니다. 미리 감사드립니다.

답변1

su -c 'expect -c "spawn ..."'아마도 추가 따옴표를 사용해야 할 것입니다 .

관련 정보