taha
Рейтинг
+0.76
Сила
0.60

taha

Дмитрий

avatar
Вот почему я люблю консоль, так это потому, что искал это окошко очень долго, но так и не понял как его вызвать =))
Ладн, надо больше покапаться с ним, найдется =))
avatar
это «The Dude» на картинке??
как так красиво связи настроили??
avatar
спасибо большое) помучаю эти правила, но видимо пока я до этого не дорос ещё =) очень смутно понимаю происходящее в mangle =((
В общем, насколько я понял, нужно настроить роутинг маркированых wan1 на первого прова, wan2 на второго… Завернуть http траф на проксик, задать правила NAT'а на оба порта, а дальше в mangle происходит чудо, которое я понял очень смутно =\
буду мучить
avatar
Хотелось бы почитать про организацию работы с двумя провайдерами и балансировку нагрузки на оба канала… Нормальных статей про это на микротиках я еще не видел =)
avatar
А не нужно писать о том, что интересно людям… Это неблагодарная работа… Нужно писать, что интересно для себя)))
avatar
А часть 2 когда будет??)) а то у меня уже было всё установлено… жду историй про интересные плюшки GNS
avatar
у меня /dev/pts/2 =))))) а может быть 3 и 4 =))
akkerman, обрати внимание ны вывод
taha@taha-Lenovo:~$ cat /etc/fstab > >( sort | sed -e '/^#/d' ) 2> >( wc -l )
<u><strong>taha@taha-Lenovo:~$ 0</strong></u>
proc            /proc           proc    nodev,noexec,nosuid 0       0
.....
   1

попробуй не нажимать Enter, а сначала ввести любую команду)

вот так будет хорошо работать:
cat /etc/fstab > >( sort | sed -e '/^#/d' ) 2> >( wc -l ) | cat
avatar
Забыл написать…

cat /etc/fstab > >( sort | sed -e '/^#/d' 1>/tmp/file )

Будет работать нормально…

А почему не работает в первом случае… будем разбираться)))
avatar
Ухты… я, если честно, еще никогда это не использовал… только <(… )
И я бы не советовал так писать… Если это действительно нужно, то лучше поискать другое решение или использовать именованые пайпы. Просто sed выплевывает в унаследованный /dev/pts/3 результаты своей работы. И результаты его работы могут перемешаться с выводом последующих команд. У меня эта команда работает при каждом запуске по разному. И пару раз нормально завершилась…

Кстати

{
  {
    cmd1 3>&- |
      cmd2 2>&3 3>&-
  } 2>&1 >&4 4>&- |
    cmd3 3>&- 4>&-

} 3>&2 4>&1

Делает тоже, что и эта команда))
avatar
ещё хочу добавить, что с математическими операциями также хорошо справляется $[] и как не странно тоже поддерживает тернарный оператор)))
z=$[2+5*10]
n=$[z<5?10:20]
echo $n

также мощь (()) не должна затмивать старого доброго [[]]
МОЩЬ [[]]:
z="mystring"
[[ "$z" =~ (str.*) ]] && echo yes
avatar
Это нормально… у меня вообще иногда складывается впечатление, что я не знаю bash… причём чем больше узнаю, тем больще оно складывается))
avatar
Хорошие у Вас заметки…
хотелось бы добавить, что еще есть возможность использования тернарного оператора
например:
z=20
(( n = z<15 ? 33 : 55 ))
echo $n
avatar
я знаю что косяк в многострочности и это накладывает ограничения…
а по поводу последней команды, то я так и задумывал)) ведь как в прикладной программе, когда происходит исключение, его перехватывает системный обработчик и передает управление в функцию, которая указана в SEH :) поэтому я и использовал "|| return 1" другой косяк в том что если в конвеере будет, допустим, grep и он ничего не отыщет, то вся конструкция посчитается ошибочной, что нас не устроит))
кстати в bash есть хорошая переменная ${PIPESTATUS[@]}, но у меня пока нет времени совсем замарочится
avatar
Кажись заработало… если в eval по одной строчке запихивать…
try(){
while read -r line; do
  { ERR=$( eval $line 2>&1 1>&3 ); } 3>&1 ||  return 1
done
}

if ! try <<EOF
   ls /tmp | grep orb
   ls /ggg
EOF
then
   echo -e "Command: $line\n$ERR"
fi

Результат:
taha@Lenovo:/home/taha# bash ./tst.sh
orbit-taha
Command: ls /ggg
ls: невозможно получить доступ к /ggg: Нет такого файла или каталога
avatar
а у меня что-то ничего не выходит с пайпами
не получается обойти проблему с символом перенаправления
+ eval ls /tmp '|' grep co
avatar
Вообще я не заметил в статье особой привязки к eval.
Смысл не в этом, а в том, что Вы попытались создать конструкцию из высокоуровнивых языов (более, так скажем, приспособленных) в bash… Помню когда-то тема была на wasm по объектно-ориентированному программированию на fasm. Это осуществлялось с помощью очень гибкой системы макросов в fasm.
Тобишь смысл создания подобный конструкций в том, чтобы абстрагироваться от какой-то проблемы.
Я предлагаю не привязываться к eval и продолжать улучшать эту функцию вместе…
Ещё одной проблемой оказалось, то что между EOF'ами нелзя запихнуть конвееры… видимо из-за того что команды наследуют дескрипторы от родителя и немогут нормально перенаправлять потоки
avatar
что-то && из головы вылетело))))))

тогда можно сделать так:
try(){
 while read line; do
  { ERR=$( $line 2>&1 1>&3 ); } 3>&1 ||  return  1
 done
}

if ! try <<EOF
   ls /home
   ls /tmp
   ls /tmpz
   ls /tmpd
EOF
then
   echo "bla-bla-bla: $ERR"
fi
avatar
мне кажется так оптимальней
{ STDERR=$(eval "$(cat -)" 2>&1 1>&3 ); } 3>&1


и еще… Если последняя команда в try <<EOF… EOF даст 0, то вся конструкция не сработает.
Например:
if ! try <<EOF
   ls /rrr
   ls /ddd
   ls /ggg
   ls /tmp
EOF
then
   echo "bla-bla-bla: $STDERR"
fi