我正在尝试运行一个进程,我将把它放入一个bash脚本(一旦我弄清楚了)。我正在尝试写入文本文件:
martyn@localhost:/var/www$ sudo cat << EOF > /var/git/myproject.git/hooks/post-update
#!/bin/sh
echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo
cd /var/www/myproject || exit
unset GIT_DIR
git pull origin master
exec git-update-server-info
EOF
..但是出现以下错误:
-bash: /var/git/myproject.git/hooks/post-update: Permission denied
我想放sudo
我会在这里获得许可,不是吗?
答案 0 :(得分:4)
在调用sudo之前,shell中会发生文件重定向。在bash中有一个常见的成语来完成你想要做的事情:
sudo tee /var/git/myproject.git/hooks/post-update <<EOF >/dev/null
这种方式tee(在sudo下)写入输出文件,然后从tee中丢弃辅助输出流。
答案 1 :(得分:0)
另一种有效的方法是:
sudo bash -c 'exec cat > /var/git/myproject.git/hooks/post-update' << EOF
...
EOF
注意:有些shell实际上支持-c
,就像bash
一样,所以你也可以在它上面使用它。