Да, есть способ.
Существует массив номеров строк, в которых была вызвана функция.
Определите эту функцию:
f(){ echo "${BASH_LINENO[-2]}"; }
И вызовите f
в любой строке, номер которой вам нужен, например:
#!/bin/bash
f(){ echo "${BASH_LINENO[-2]}"; }
f
echo next1
f
echo next2
f
echo next 3
f
Будет напечатано:
6
next 1
9
next 2
12
next 3
15
Можно расширить, чтобы показать след вызываемые функции:
#!/bin/bash
f(){
for ((i=${#BASH_LINENO[@]}-1;i>=0;i--)); do
printf '<%s:%s> ' "${FUNCNAME[i]}" "${BASH_LINENO[i]}";
done
echo "$LINENO"
}
SomeOtherFunction(){ echo -n "test the line numbering: "; f; }
f
echo next 1
echo -n " This line numbering: "; f
SomeOtherFunction
echo next 2
echo -n " This line numbering: "; f
SomeOtherFunction
echo next 3
echo -n " This line numbering: "; f
Которые будут печатать:
$ ./script
<main:0> <f:12> 7
next 1
This line numbering: <main:0> <f:15> 7
test the line numbering: <main:0> <SomeOtherFunction:16> <f:10> 7
next 2
This line numbering: <main:0> <f:19> 7
test the line numbering: <main:0> <SomeOtherFunction:20> <f:10> 7
next 3
This line numbering: <main:0> <f:23> 7
Обратите внимание, что вывод echo "$LINENO"
всегда один и тот же (7 в данном случае).
1 )Подключите компьютер напрямую к серверу, назначьте ему статический IP-адрес 192.168.x.x, войдите в систему и устраните ограничение.
2 )Создайте сетевое пространство имен на своем ПК, запустите xterm в сетевом пространстве имен. Подключите сетевое пространство имен через виртуальную пару eth -к основному пространству имен. Добавьте адреса 192.168.x.x в пару eth -. Включить переадресацию в основном пространстве имен. Добавьте статический маршрут к 192.168.x.x на вашем маршрутизаторе. Используйте ssh
из сетевого пространства имен; он будет иметь исходный адрес 192.168.x.x.
(1 )наверное проще.
Если ваш маршрутизатор не изолирует ваши устройства, вы можете попробовать добавить псевдоним на беспроводную карту вашего компьютера.
Проверьте имя беспроводного сетевого интерфейса вашего ПК (возможноwlan0
):
ip address show
Добавьте второй IP-адрес к вашему интерфейсу:
ip address add 192.168.0.100/16 dev wlan0
Проверьте таблицу маршрутизации вашего компьютера:
ip address show
ip route show
Попробуйте подключиться к вашему серверу по ssh. При необходимости попробуйте использовать ssh -b
опцию :
ssh -b 192.168.0.100 user@server
Обратите внимание, что часто мне приходилось подключать оба устройства к маршрутизатору с помощью провода, даже если маршрутизатор (ошибался? )заявил, что это не было изоляцией.