В <<< "$ (
zsh
(где <<<
] впервые был введен, вдохновленный тем же оператором в порту Unix rc
), ksh93
(оператор $ (
ksh
), mksh
и bash
),
Для $ (
(блокирует NUL байтов, кроме для zsh
), удаляет все завершающие символы новой строки, что приводит к расширению $ (
Для <<< some-text
оболочка сохраняет some-text
, за которым следует один символ новой строки, во временный файл, и открывает этот временный файл в файловом дескрипторе 0.
Таким образом, в основном <<< "$ (
файла
, где конечные символы новой строки были заменены только одним (и с различные виды неправильного поведения, если файл содержит байты NUL, кроме zsh
).
В то время как в <файл
, это файл
, который напрямую открывается для чтения на стандартном вводе.
Конечно,
<<< "$ (
файл
, как в tr 1 2 <<< "$ (
).
Обратите внимание, что yash
поддерживает оператор <<<
(хотя реализует его с конвейером (а не с обычным файлом ) вместо временного файла). . но не $ (
<<< "$ (cat
yash
строки являются только символами, поэтому "$ (cat
Я нашел решение, используяhttps://stackoverflow.com/a/3980904/1424395иhttps://unix.stackexchange.com/a/59632/269821
Я использую read -s
для ввода пароля в переменную, а затем использую sshpass
для передачи пароля в ssh
.
#!/usr/bin/env bash
# Read Password
echo -n Password:
read -s password
echo
sshpass -p $password ssh -fN -p 22 usr1@gate1 -L 10001:ip1:22
sshpass -p $password ssh -fN -p 22 usr2@gate2 -L 10002:ip2:22
...
sshpass -p $password ssh -fN -p 22 usrn@gaten -L 1000n:ipn:22