Используйте read
:
read -a ssh_args <<< "${SSH_ORIGINAL_COMMAND}"
set -- "${ssh_args[@]}"
Это проанализирует слова из SSH_ORIGINAL_COMMAND
в массив ssh_args
, обрабатывая обратную косую черту ( \
) как escape-символ. Затем элементы массива передаются в качестве аргументов в набор
. Он работает со списком аргументов, передаваемым через ssh
следующим образом:
$ ssh some_server foo 'bar\ car' baz
$ ssh some_server foo bar\\ car baz
printf "% q" цитирует оболочку ssh позволяет это:
$ sshwrap some_server foo bar\ car baz
$ sshwrap some_server foo 'bar car' baz
Вот такой пример оболочки:
#!/bin/bash
h=$1; shift
QUOTE_ARGS=''
for ARG in "$@"
do
ARG=$(printf "%q" "$ARG")
QUOTE_ARGS="${QUOTE_ARGS} $ARG"
done
ssh "$h" "${QUOTE_ARGS}"