su - user -c env는 -l을 추가하지 않으면 환경 변수를 가져올 수 없습니다.

su - user -c env는 -l을 추가하지 않으면 환경 변수를 가져올 수 없습니다.

나는 지금 문제에 직면해 있는데, 나는 Linux를 처음 접했기 때문에 무슨 일이 일어나고 있는지 이해하지 못합니다.

루트로 실행해야 하는 스크립트(그렇게 하는 것이 허용되지 않을 것 같아서 게시하지 않겠습니다)를 실행하려고 하는데, 실행하면 필수 권한 없이는 실행되지 않는다고 나옵니다. 환경 변수를 설정해야 합니다. 하지만 스크립트는 그렇게 해야 합니다.

두 개의 상자에 설치했는데 하나는 제대로 작동하고 다른 하나는 작동하지 않습니다. 작업 상자에서 이 명령을 실행하면
su - user -l -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'
올바른 경로가 반환됩니다.

다른 상자에서 실행하면 결과가 반환되지 않습니다. 그러나 -l과 -l을 전환하면 올바른 경로가 반환됩니다.

여기서 무엇이 잘못되고 있는지 올바른 방향으로 알려줄 수 있는 사람이 있나요? 불행히도 문제가 해결되는지 확인하기 위해 상자에 있는 모든 것을 업그레이드할 수는 없습니다. 하지만 현재로서는 단서가 없기 때문에 범위를 좁힐 수 있다면 많은 도움이 될 것입니다. 더 많은 정보가 필요하시면 제가 제공할 수 있기를 바랍니다(물론 다음 주가 될 수도 있음).

참고: 실제 스크립트에서는 -l이 전혀 존재하지 않습니다.
if [ "$myself" = "root" ]; then
ENVVARIABLE=`su - $user -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'
fi

편집 1: 두 시스템의 사용자는 동일한 쉘(bash)을 사용합니다.

답변1

경고: Linux의 su는 모든 시스템에서 동일하지 않을 수 있습니다. 늘 그렇듯, man su대답을 해줘야지당신의옵션 및 버전.

통신 환경 조건:

  1. 명령을 통해 변수 내보내기export ENVVARIABLE
  2. su는 환경을 보존하라는 지시를 받습니다. 여기(Debian 9)에서는 -m, -p, --preserve-environment 옵션을 사용하여 수행할 수 있습니다.

그래서 이것은 여기서 작동합니다:

su -m - user -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'

관련 정보