Me gustaría hacer un script bash que cree un git-hook, para que pueda ejecutar $ bash ./create-hook.sh example.com y crea este archivo:

#!/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.

`` `

Así que aquí está el estado actual del script (no funciona):

#!/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

¿Cómo pasar la variable $1 desde la línea de comando al archivo creado?

0
François Romain 29 jun. 2017 a las 02:24

2 respuestas

La mejor respuesta

Encontré una solución aquí usando tee … en lugar de bash -c 'cat…:

sudo tee > post-receive << EOF
TARGET="/var/www/$1"
# …
EOF
0
François Romain 1 jul. 2017 a las 15:09

El << EOF * escribirá lo que sea que esté después hasta que usted escriba EOF en el archivo, por lo que $ 1 se enviará así (textualmente $1) en el archivo. Supongo que tendrás que escribir el archivo haciendo eco:

( echo TARGET='"/var/www'$1'"'; echo TEMP='"/var/www/'$1'_temp"'; echo REPO='"/srv/git/'$1'.git"'; etc etc ) > post_receive

O algo por el estilo

0
eftshift0 28 jun. 2017 a las 23:32