이 bash 스크립트가 일반 사용자가 소유한 파일을 생성하도록 하려면 어떻게 해야 합니까?

이 bash 스크립트가 일반 사용자가 소유한 파일을 생성하도록 하려면 어떻게 해야 합니까?

간단한 bash 프로그램이 있는데 파일 구조는 다음과 같습니다.

$ 트리

.
├── includes
│   └── vimrc.vim
└── test_sourcing_vimrc.sh

.

file: test_sourcing_vimrc.sh

#! /bin/bash

self_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )

sudo -s -u lando cat includes/vimrc.vim > test_output

.

file: includes/vimrc.vim (contains a .vimrc content)

" vim settings

set number
set laststatus=2
syntax enable

내 의도는

  • 스크립트를 루트로 실행합니다(스크립트에는 다른 이유로 이러한 권한이 필요합니다).
    sudo ./test_sourcing_vimrc.sh

  • sudo루트가 아닌 사용자에게 "lando" 제공 - 이미 존재합니다.

  • cat내용을 includes/vimrc.vim새 파일로test_output
  • test_output"lando"가 소유해야 하지만 루트가 소유합니다.
    -rw-r--r-- 1 root root 5620 Sep 24 19:00 test_output

루트가 아닌 올바른 사용자가 소유한 파일을 생성하기 위해 이 스크립트를 어떻게 얻을 수 있습니까?

답변1

또 다른 해결책은 다음과 같습니다.

sudo install -o lando -m0775 -p -S includes/vimrc.vm test_output

복사된 파일이 받는 권한을 설정합니다 -m0775. 이러한 권한은 실제로 기본값이므로 필요한 경우 생략할 수 있습니다. -p복사된 파일의 수정 시간을 원본 파일과 동일하게 만듭니다 . 이렇게 -S하면 이미 존재하는 경우 소스 파일이 성공적으로 복사되지 test_output않는 한 삭제되지 않습니다 . install필요에 따라 이러한 작업이 필요하지 않을 수도 있습니다. 어쨌든, 이 문제에 직면하고 다른 요구 사항이 있는 다른 사람들을 위해 이를 지적하겠습니다.

마지막으로 포함된 스크립트는 이미 루트로 실행 중이므로 초기 sudo.

답변2

해결됨

변경됨

sudo -s -u lando cat includes/vimrc.vim > test_output

도착하다

sudo -s -u lando <<EOF
cat includes/vimrc.vim > test_output
EOF

관련 정보