Проверка аргументов сценария bash

Я рекомендую изменить вашу ProxyCommand с использования nc на -W . Например:

ProxyCommand ssh -l USERNAME BASTIONHOST1 -W %h:%p

У него меньше требований к хосту-бастиону, поэтому вероятность его выхода из строя в случае, если администратор решит изменить настройку хоста-бастиона, меньше.

Я не думаю, что есть какой-то способ пролистать между разными pac-файлами. Но вы можете более или менее просто объединить два файла pac - с одной небольшой оговоркой. Точка входа будет существовать в обоих файлах. Вам нужно будет переименовать точку входа в исходном pac-файле, и в ваших собственных дополнениях вы сможете выполнять вызовы переименованной версии функции.

Исторически точкой входа была функция FindProxyForURL. Некоторые новые браузеры имеют расширения, которые активируются с помощью точки входа с другим именем.

0
22.02.2018, 00:37
2 ответа

Si enmascaras $2 en ambos casos y en los posteriores, evitas que los $2 no sean nada cuando estén vacíos.

#!/bin/bash
echo $1;
if [ -n ${2+x} ] ; then
    if [ "$2" != "log" -a "$2" != "cat" ] ; then
        echo "$0 $1 : second argument must be empty, "tail" or "cat""
        exit 1
    fi

(con idioma alemán):

> echo $([ != "log" -a != "cat" ])
> bash: [: Zu viele Argumente.

comparar:

> echo $([ "" != "log" -a "" != "cat" ])
>

Un segundo problema podría ser que primero verifique log y cat, pero dígale al usuario que está buscando tail y cat.

0
28.01.2020, 02:43

Personalmente, creo que toda la idea de preguntar repetidamente "¿Reconectar?" es una abominación que, en el mejor de los casos, duplica sin sentido el historial de comandos de tu caparazón, pero es mucho, mucho peor. En serio, ¿qué tan difícil es simplemente ejecutar ssh root@remotehost tail -f /var/log/dp.logy luego presionar Arriba -FlechaIngresar si desea ejecutarlo nuevamente? o simplemente escriba un par de funciones de shell o pequeños scripts si no desea escribir el comando completo ni una sola vez (, consulte los ejemplos a continuación ).

Dicho esto, aquí hay una mejor manera de hacer lo que estás tratando de hacer:

#!/bin/bash

error() {
  local ec msg

  ec="$1" ; shift
  msg="$*"

  [ -n "$msg" ] && echo "$msg" >&2
  [ "$ec" != 0 ] && exit "$ec"
}

[ -z "$1" ] && error 1 "first argument missing. must be hostname"
echo "$1"

myssh() {
  local remote reconnect quit

  remote="$1" ; shift
  quit=0

  while [ $quit != 1 ] ; do
    ssh -o StrictHostKeyChecking=no -p 2222 "$remote" "$@"

    read -p "Reconnect (Y/n) [Y]? " reconnect
    [[ $reconnect =~ ^[Nn] ]] && quit=1
  done
}

case "$2" in
   cat|log) myssh "root@$1" cat /var/log/dp.log ;;
      tail) myssh "root@$1" tail -f /var/log/dp.log ;;
        "") myssh "root@$1" ;;
         *) error 1 "Unknown second argument '$2'" ;;
esac

He aquí una forma aún mejor de hacerlo.

Agregue ~/bin a su $PATH y luego cree los siguientes scripts (no olvide hacerlos ejecutables conchmod +x)

~/bin/missh.sh:

#!/bin/sh
[ -z "$1" ] && echo hostname is required && exit 1
remote="$1" ; shift
ssh -o StrictHostKeyChecking=no -p 2222 "root@$remote" "$@"

~/bin/remoto -cat.sh:

#!/bin/sh
myssh.sh "$1" cat /var/log/dp.log

~/bin/remoto -tail.sh:

#!/bin/sh
myssh.sh "$1" tail -f /var/log/dp.log

Ejecútelos cuando los necesite. Utilice el historial de comandos -de su shell para ejecutarlos de nuevo con la frecuencia que desee.

myssh.shse puede usar para obtener un shell de inicio de sesión raíz en el host remoto Y(como lo demuestran los otros dos scripts )para ejecutar cualquier comando arbitrario como root en el host remoto.

1
28.01.2020, 02:43

Теги

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