我想创建一个bash脚本来创建一个git-hook,所以我可以运行$ bash ./create-hook.sh example.com
并创建这个文件:
#!/bin/sh
NAME="example.com"
TARGET="/var/www/${NAME}"
TEMP="/var/www/${NAME}_temp"
REPO="/srv/git/${NAME}.git"
mkdir -p $TEMP
git --work-tree=$TEMP --git-dir=$REPO checkout -f
rm -rf $TARGET/*
mv $TEMP/* $TARGET
rm -rf $TEMP
# etc.
```
所以这是脚本的当前状态(不工作):
#!/bin/sh
if [[ $# -eq 0 ]]
then
echo 'No name provided'
exit 1
fi
sudo bash -c 'cat << EOF > post-receive
TARGET="/var/www/$1"
TEMP="/var/www/$1_temp"
REPO="/srv/git/$1.git"
mkdir -p \$TEMP
git --work-tree=\$TEMP --git-dir=\$REPO checkout -f
rm -rf \$TARGET/*
mv $TEMP/* \$TARGET
rm -rf \$TEMP
如何将变量$1
从命令行传递到创建的文件?
答案 0 :(得分:0)
&lt;&lt; EOF * 将写入之后的任何内容,直到您将EOF写入文件,因此$ 1将像这样(文本$1
)发送到文件中。我想你必须通过echoing来编写文件:
( echo TARGET='"/var/www'$1'"'; echo TEMP='"/var/www/'$1'_temp"'; echo REPO='"/srv/git/'$1'.git"'; etc etc ) > post_receive
或者那些行
答案 1 :(得分:0)
我使用tee …
代替bash -c 'cat…
找到了解决方案here:
sudo tee > post-receive << EOF
TARGET="/var/www/$1"
# …
EOF