Su -c가 작동하지 않고 무시됩니다.

Su -c가 작동하지 않고 무시됩니다.

suwith 매개변수를 사용하면 -c명령을 사용자의 셸에 전달하여 실행한다고 설명되어 있습니다.

하지만 내 환경에서는 -c옵션을 완전히 무시하고 사용자의 쉘을 변경합니다.

[root@mftf~]# su - demo -c "ls -la"

[demo@mftf~]$

그러나 명령 없이 사용하면 -c인수가 필요한 오류가 표시되므로 무시되지 않습니다. RHEL7을 사용하고 있습니다.-c

답변1

-(또는 )을 사용 하면 -l지정된 사용자에 대한 대화형 로그인 셸을 호출할 수 있습니다.

특정 사용자에 대해 쉘 초기화 파일이 수행하는 작업에 따라 이 명령이 실행되지 않을 수 있습니다. 예를 들어 exec호출 셸에서 명령줄 인수를 전달하지 않고 직접 또는 tmux또는 같은 것을 통해 셸을 다시 실행하면 ssh-agent명령 문자열이 손실됩니다.

예를 들면 다음과 같습니다.

if tmux has-session; then
    exec tmux attach-session
else
    exec tmux
fi

...my에서는 이것이 실행되지 않는 ~/.profile이유입니다 (대신 대화형 쉘이 내부적으로 시작됩니다 ).su -l me some_commandsome_commandtmux

다른 사용자로 명령을 실행하려면 sudo를 사용하십시오.

# su -c some_command username

우분투 su(1)매뉴얼에서:

-, -l,--login

사용자가 직접 로그인할 때 기대하는 것과 유사한 환경을 제공합니다.


아니면 설정 sudo해서 사용하세요

$ sudo -u user some_command

답변2

su 뒤에 -(하이픈)을 사용하지 마십시오. "-"를 사용하여 su를 호출할 때 실행하면
su demo -c 'ls -la'
사용자 프로필과 환경이 초기화됩니다. 사용자 셸이 끝에 도달하는 것을 허용하지 않는 구성 파일에 일부 스크립트가 있어야 합니다.

관련 정보