По крайней мере, для SFTP это можно исправить с помощью подсистемы internal-sftp
, поскольку она не читает .bashrc
или / etc / motd
.
Просто измените файл / etc / ssh / sshd_config
и измените подсистему SFTP:
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
И ошибка исчезла.
q='"'; t=( "${@/#/$q}" ); u=( "${t[@]/%/$q}" ); echo ${u[@]}
Bash no admite sustituciones anidadas, así que gracias ahttps://stackoverflow.com/questions/12303974/assign-array-to-variable#12304017por mostrar cómo reasignar una matriz. Consulteman bash
(https://linux.die.net/man/1/bash)para obtener detalles sobre arreglos, expansión y sustitución de patrones (en la expansión de parámetros ).
Bash coloca los parámetros de la línea de comando como una matriz en$@
q
mantiene el carácter de cita.
Las comillas dobles alrededor de la expansión de parámetros ${... }
conservan los parámetros individuales como elementos distintos y envolverlos en ( )
le permite asignarlos como una matriz a una variable.
/#/$q
en una expansión de parámetros sustituye el comienzo del patrón (como expresión regular^
)con el carácter de comillas.
/%/$q
en una expansión de parámetros sustituye el final del patrón (como expresión regular$
)con el carácter de comillas.
Hay algunos cambios en las declaraciones anteriores para usar un carácter de comillas diferente, agregar comas entre los parámetros y eliminar la coma final. Y, por supuesto, estoy siendo malo al poner la contraseña en la invocación de mysql. Entonces demándame.
q="'"; t=( "${@/#/$q}" ); u="${t[@]/%/$q,}"; v="u.email in( ${u%,} )"
mysql -uprod_program -h10.90.2.11 -pxxxxxxxxxxxx my_database <<END
select...
from users u
join....
where $v # <<<<<<<<<<<<<<<<<< here is where all the hard work pays off :-)
group by user_id, prog_id
;
END