Может ли сценарий оболочки печатать свой аргумент в кавычках, как если бы вы написали их в приглашении оболочки?

По крайней мере, для SFTP это можно исправить с помощью подсистемы internal-sftp , поскольку она не читает .bashrc или / etc / motd .

Просто измените файл / etc / ssh / sshd_config и измените подсистему SFTP:

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

И ошибка исчезла.

9
01.09.2016, 02:03
1 ответ

Una solución alternativa para bash

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 ).

Análisis

Bash coloca los parámetros de la línea de comando como una matriz en$@

qmantiene 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.

/#/$qen una expansión de parámetros sustituye el comienzo del patrón (como expresión regular^)con el carácter de comillas.

/%/$qen una expansión de parámetros sustituye el final del patrón (como expresión regular$)con el carácter de comillas.

Caso de uso :consultando MySQL para obtener una lista de direcciones de correo electrónico desde la línea de comando

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
0
27.01.2020, 20:06

Теги

Похожие вопросы