su
with 매개변수를 사용하면 -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_command
some_command
tmux
다른 사용자로 명령을 실행하려면 su
do를 사용하십시오.
# su -c some_command username
우분투 su(1)
매뉴얼에서:
-
,-l
,--login
사용자가 직접 로그인할 때 기대하는 것과 유사한 환경을 제공합니다.
아니면 설정 sudo
해서 사용하세요
$ sudo -u user some_command
답변2
su 뒤에 -(하이픈)을 사용하지 마십시오. "-"를 사용하여 su를 호출할 때 실행하면su demo -c 'ls -la'
사용자 프로필과 환경이 초기화됩니다. 사용자 셸이 끝에 도달하는 것을 허용하지 않는 구성 파일에 일부 스크립트가 있어야 합니다.