Как geekosaur сказал, Вы используете неправильные кавычки. Палка с doublequotes, когда Вы хотите, чтобы оболочка развернула ссылку на переменную до значения.
Во-вторых, Вы делаете математику в двойных круглых скобках неправильно. Вы не хотите $ внутри там, ссылки на переменную в $ (()), конструкция не нуждается в $.
#!/bin/bash
echo "enter number"
read number
newnumber=${number#${number%%[!0]*}}
newnumber=$((newnumber + 1))
echo "$number changes to $newnumber"
Те два изменения работают на меня в Вашем оригинале также...
read var
newvar=${var#${var%%[!0]*}}
newvar=$((newvar + 1))
printf -v newvar "%02d" "$newvar"
grep "$newvar" /some/dir
ОБНОВЛЕНИЕ, добавленное printf
строка для форматирования вывода. ОБНОВИТЕ 2 добавленных в фиксации для того, чтобы ввести дополненные номера нуля. Это должно быть полным примером теперь.
Если Perl установлен (как это будет на машине RHEL):
perl -MIO::Socket::INET -ne 'BEGIN{$l=IO::Socket::INET->new(
LocalPort=>1234,Proto=>"tcp",Listen=>5,ReuseAddr=>1);
$l=$l->accept}print $l $_' < ~/.bashrc
работал бы, если локальный брандмауэр не позволяет входящие соединения с 1234.
Если socat установлен:
socat -u - tcp-listen:1234,reuseaddr < ~/.bashrc
Если zsh установлен:
zmodload zsh/net/tcp
ztcp -ld3 1234 && # start listening socket on fd 3
ztcp -ad4 3 && # accept connection on fd 4
ztcp -c 3 && # close the listening socket that is no longer needed
cat < ~/.bashrc >&4 && # send the data
ztcp -c 4 # close the communication socket to tell the other end we're finished
К сожалению, невозможно сделать только с ударом. /dev/tcp/<ip>/<port>
виртуальные файлы реализованы в пути, которые колотят попытки соединиться с указанным <ip>:<port>
использование connect(2)
функция. Для создания сокета слушания он должен был бы звонить bind(2)
функция.
Можно проверить это путем загрузки bash
источники и рассмотрение его. Это реализовано в lib/sh/netopen.c
файл в _netopen4
функция (или _netopen6, который также поддерживает IPv6). Эта функция используется функцией обертки netopen
из того же файла, который по очереди непосредственно используется в файле redir.c
(redir_special_open
функция) для реализации этого виртуального перенаправления.
Необходимо найти некоторое другое применение, которое может создать сокет слушания на машине.
вы можете сделать это, как вы сказали, запросив /dev/tcp с помощью bash:
</dev/tcp/host/port
если он запускается немедленно, он прослушивается, в любом случае время ожидания истекает
Невозможно слушать, потому что прослушивание не в bash, как указал Адамски.
Но вам не нужно слушать на клиенте, поэтому вам не нужен netcat на клиенте для передачи файлов, например:
## To send a file to the locked down computer:
## Local server where you do have netcat
cat ~/.bashrc | nc -l -q 1 -p 8998
## Remote locked down computer without netcat
cat < /dev/tcp/local.server.ip.addr/8998 > latest.bashrc
## To grab a file from the locked down computer:
## First - on the local server run
nc -l -p 8998 -q 1 > remote.bashrc < /dev/null
## Then on the locked down computer run:
cat ~/.bashrc > /dev/tcp/local.server.ip.addr/8998 0<&1 2>&1
Вы можете использовать ucspi -tcp Д. Дж. Бернштейна, см.http://cr.yp.to/ucspi-tcp.html
ztcp -c 4
управляйте читает 3? В других отношениях большая информация, большая подсказка. – dezza 17.07.2016, 14:28