我怎样才能让这个 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

  • sudo给非 root 用户“lando”——已经存在

  • cat的内容includes/vimrc.vim到一个新文件中test_output
  • test_output应该由“lando”拥有,但由root拥有,例如
    -rw-r--r-- 1 root root 5620 Sep 24 19:00 test_output

我怎样才能让这个脚本创建一个由正确的非root用户拥有的文件?

答案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

相关内容