从bash脚本写入文件

时间:2014-05-31 02:56:48

标签: linux bash shell

我正在尝试运行一个进程,我将把它放入一个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我会在这里获得许可,不是吗?

2 个答案:

答案 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一样,所以你也可以在它上面使用它。