58 lines
1.4 KiB
Bash
58 lines
1.4 KiB
Bash
#!/bin/bash
|
|
|
|
BASHRC="$HOME/.bashrc"
|
|
MARKER_START="# >>> c-run setup >>>"
|
|
MARKER_END="# <<< c-run setup <<<"
|
|
|
|
# Crée le .bashrc s'il n'existe pas
|
|
touch "$BASHRC"
|
|
|
|
# Supprime l'ancienne version de la fonction si elle existe
|
|
if grep -q "$MARKER_START" "$BASHRC"; then
|
|
sed -i "/$MARKER_START/,/$MARKER_END/d" "$BASHRC"
|
|
fi
|
|
|
|
# Ajoute la fonction à la fin du .bashrc
|
|
cat >> "$BASHRC" << 'EOF'
|
|
# >>> c-run setup >>>
|
|
c-run() {
|
|
if [ -z "$1" ]; then
|
|
echo "c-run: erreur: nom de fichier manquant" >&2
|
|
return 1
|
|
fi
|
|
|
|
local source_file="$1"
|
|
shift
|
|
local exec_file
|
|
exec_file=$(mktemp)
|
|
|
|
trap 'rm -f "$exec_file"' INT
|
|
|
|
gcc "$source_file" -o "$exec_file" "$@"
|
|
local gcc_status=$?
|
|
|
|
if [ $gcc_status -ne 0 ]; then
|
|
echo "--- c-run: la compilation a échoué (gcc a retourné le code $gcc_status) ---" >&2
|
|
rm -f "$exec_file"
|
|
trap - INT
|
|
return $gcc_status
|
|
fi
|
|
|
|
"$exec_file"
|
|
local exec_status=$?
|
|
|
|
rm -f "$exec_file"
|
|
trap - INT
|
|
|
|
return $exec_status
|
|
}
|
|
# <<< c-run setup <<<
|
|
EOF
|
|
|
|
# Recharge le .bashrc dans le shell courant
|
|
source "$BASHRC"
|
|
|
|
# Utilise 'return' au lieu de 'exit' pour ne pas fermer le terminal de l'utilisateur
|
|
# si le script est sourcé. Si le script est exécuté normalement (sh install.sh),
|
|
# le 'return' va simplement ignorer l'erreur silencieusement.
|
|
return 0 2>/dev/null || exit 0 |