User Tools

Site Tools


scp_y_el_uso_no_interactivo

Problema al intentar copiar ficheros o carpetas con scp (C0644)

Cuando el comando scp no funciona y al ejecutarlo en modo “verbose” tampoco parece visualizarse ningún error, el problema suele recaer en el uso interactivo de scp.

Problema de uso interactivo con el comando scp .

cp -P 2222 usuario@dominio.com:/home/usuario/fichero .
usuario@dominio.com's password: 
C0644 880 fichero

Una shell es considerada interactiva cuando lee y escribe datos desde el terminal de un usuario. Muchos scripts examinan la variable de shell llamada “$PS1” para saber si se están utilizando de forma interactiva o no. Por lo general, PS1 se encuentra en shells interactivas.

Lógicamente scp hace un uso no interactivo de la bash, por lo que si no se tiene la siguiente linea definida en la cabecera del fichero bashrc, el comando scp no funcionará correctamente.

Opción 1.

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Opción 2.

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

Si la condición [ -z “$PS1” ] es cierta, significa que “$PS1” tiene un tamaño 0 (Shell no interactiva).

Comprobar el uso interactivo (Prueba de concepto).

  • Uso no interactivo: Cuando la variable PS1 tiene longitud cero.
  • Uso interactivo: Cuando la variable PS1 no tiene longitud cero.

Creamos un script con el siguiente código.

[ -z "$PS1" ] && echo "not interactive"

Si ejecutamos el script vemos que su uso no es interactivo.

$ bash Script.sh
This shell is not interactive

Si se ejecuta dicha instrucción desde la terminal, no se obtiene “not interactive” ya que es un uso interactivo.

$ [ -z "$PS1" ] && echo "not interactive"
scp_y_el_uso_no_interactivo.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1