この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

私の意図は

  • スクリプトをrootとして実行します(スクリプトには他の理由でこれらの権限が必要です)。
    sudo ./test_sourcing_vimrc.sh

  • sudoroot以外のユーザーに「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必要に応じて、これらの作業は必要ない場合があります。とにかく、この問題に直面し、他の要件がある他の人のためにこれを指摘します。

最後に含まれているスクリプトはすでにrootとして実行されているので、最初のsudo.

答え2

解決済み

変更

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

到着

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

関連情報