Вы можете сохранить псевдоним оболочки или функцию в вашем .bashrc
или любом другом файле конфигурации вашей оболочки. Например, для псевдонима Bash:
alias my_ssh="
ssh mehrdad@"IP1 ||
ssh tomas@IP2 ||
ssh tomas@IP3
"
Затем вызовите псевдоним:
my_ssh
И если IP1 дает сбой, ||
заставляет выполнить вторую команду. И так снова, теперь с IP3.
Я не проверял это, но все должно быть в порядке. Или, по крайней мере, показывает путь.
Информацию о параметрах SSH, таких как прокси, см. в man ssh
.
$ grep -x -f <(sed 's/\./\\./g;s/^/.*/' listB) <(grep -v -F -x -f listB listA)
.best.co
.test.server.cloud.us-east.amazonaws.com
.abc.com.co
.def.museum.hiroshima.jp
.xyz.xxx.yyy.net
Объяснение в виде двух команд:
1.)grep -v -F -x -f listB listA
Удалите литеральные дубликаты из listA
и используйте этот вывод в качестве ввода второго grep
. Это оставляет эти записиlistA
:
.best.co
.test.server.cloud.us-east.amazonaws.com
.abc.com.co
.def.museum.hiroshima.jp
.xyz.xxx.yyy.net
.exe
.xyz.exe
(Оставшиеся строки для удаления:.exe
и.xyz.exe
)
2.)grep -x -f <(sed 's/\./\\./g;s/^/.*/' listB) <(...)
Избегайте точек .
в listB
, добавьте .*
в начало и снова grep
, чтобы сопоставить эти строки, заканчивающиеся строкой в listB
. Ввод является результатом первого grep
.
# save valid extension from listB
vexts=($(sed "s/^.*\.//g" listB))
# loop over listA and filter desired output
while read line; do
if [[ " ${vexts[@]} " == *" ${line##*.} "* ]] ; then
echo "${line}";
fi
done < listA