0 votos

Comportamiento inesperado del script bash utilizado para sincronizar archivos de puntos

Estoy usando esencialmente esta secuencia de comandos para mantener mi dotfiles bajo el control de versiones. Recientemente he añadido un snippets carpeta dentro de mi emacs.d directorio y listado como una de las cosas que debe ser un enlace simbólico a partir de mi directorio home. Sin embargo, cuando ejecuto el script crea un enlace simbólico a snippets dentro snippets sí.

Aquí está el correspondiente bit de la secuencia de comandos:

#!/bin/bash
############################
# .make.sh
# This script creates symlinks from the home directory to any desired dotfiles in ~/dotfiles
############################

########## Variables

dir=~/.dotfiles                    # dotfiles directory
olddir=~/.dotfiles_old             # old dotfiles backup directory
files="bash_profile gitignore gitconfig zshrc jrnl_config emacs.d/init.el emacs.d/custom.el emacs.d/snippets scripts/makeadate.js config/karabiner/assets/complex_modifications config/karabiner/karabiner.json"    # list of files/folders to symlink in homedir
##########

# create dotfiles_old in homedir
echo -n "Creating $olddir for backup of any existing dotfiles in ~ ..."
mkdir -p $olddir
echo "done"

# change to the dotfiles directory
echo -n "Changing to the $dir directory ..."
cd $dir
echo "done"

# move any existing dotfiles in homedir to dotfiles_old directory, then create symlinks from the homedir to any files in the ~/dotfiles directory specified in $files
for file in $files; do
    echo "Moving any existing dotfiles from ~ to $olddir"
    mv ~/.$file $olddir
    echo "Creating symlink to $file in home directory."
    ln -s $dir/$file ~/.$file
done

Así que, antes de ejecutar el script, ~/.dotfiles/emacs.d/snippets contiene sólo dos subdirectorios, latex-mode y mhtml-mode. Después de ejecutar la secuencia de comandos, que contiene un nuevo enlace simbólico a ~/.dotfiles/emacs.d/snippets. Sospecho que el problema tiene algo que ver con el hecho de que uno de los valores que la variable $file está tomando es un directorio. Pero no sé cuál es exactamente el problema.

1voto

John Palmieri Puntos 111

Si target es ya un directorio existente, el comando ln -s source target creará un vínculo target/source en ese directorio, que apunta a la original source. Que es lo que está pasando aquí: el directorio .emacs.d/snippets/ existe en el inicio, y se está ejecutando el comando

ln ~/.dotfiles/.emacs.d/snippets ~/.emacs.d/snippets

el que se crea un enlace en el actual snippets a la otra snippets.

Usted podría hacer ln -s ~/.dotfiles/.emacs.d/snippets/* ~/.emacs.d/snippets lugar. O eliminar todo lo en .emacs.d e do ln -s ~/.dotfiles/.emacs.d/* ~/.emacs.d. (Obviamente, hacer copias en primer lugar en caso de que algo va mal.) O tal vez, incluso, eliminar .emacs.d y crear una nueva versión que es sólo un enlace simbólico.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X