Ejecutar scp cuando .bashrc de la máquina remota incluye el comando de origen

Pregunta:

No puedo copiar un archivo sobre scp cuando el archivo .bashrc de la máquina remota incluye un comando de origen para actualizar las rutas y algunas variables. ¿Por que sucede?

Respuesta:

Debe hacer que parte o la totalidad de su .bashrc no se ejecute cuando su shell no sea interactivo. (Un scp es un ejemplo de una invocación de shell no interactiva, a menos que alguien haya alterado radicalmente sus sistemas). Luego coloque todos los comandos que posiblemente puedan generar resultados en esa sección del archivo.

Una forma estándar de hacer esto en un archivo init es:

# Put all the commands here that should run regardless of whether
# this is an interactive or non-interactive shell.

# Example command:
umask 0027

# test if the prompt var is not set
if [ -z "$PS1" ]; then
    # prompt var is not set, so this is *not* an interactive shell
    return
fi

# If we reach this line of code, then the prompt var is set, so
# this is an interactive shell.

# Put all the commands here that should run only if this is an
# interactive shell.

# Example command:
echo "Welcome, ${USER}.  This is the ~/.bashrc file."

También puede ver que la gente usa

[ -z "$PS1" ] && return

en lugar de mi declaración if más detallada.

Si no desea reorganizar todo su archivo, también puede hacer que ciertas líneas se ejecuten solo en un contexto interactivo envolviéndolas así:

if [ -n "$PS1" ]; then
    echo "This line only runs in interactive mode."
fi

Si segrega su .bashrc esta manera, sus comandos scp ya no deberían tener este problema.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım