我有一个简单的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