сохраните и выполните команду перенаправления/передавать по каналу в сценарии

Я, как было известно, иногда использовал ex (vi в не визуальный режим, нет ed) сделать маленький выпуск при удаленном входе через высокую строку задержки (и я поместил затем telnet в режим строки). Больший выпуск и я используем emacs локально. Отклонение telnet в пользу ssh даже для внутренней части, удаленный сеанс интранет был разумом, я прекратил делать это.

Давным-давно, я использовал строчный редактор на этом виде терминалов; это не было ed ни ex.

2
02.04.2013, 02:39
4 ответа

Необходимо использовать выражение оценки

#!/bin/bash

VER_URXVT='urxvt -help 2>&1 | head -n 2'
echo $VER_URXVT
eval $VER_URXVT

От оценки страницы справочника

          The  args  are read and concatenated together into a single com-
          mand.  This command is then read and executed by the shell,  and
          its  exit status is returned as the value of eval.  If there are
          no args, or only null arguments, eval returns 0.
1
27.01.2020, 21:50
  • 1
    Большое спасибо это точно, что я хотел. Спасибо не только для Вашего решения, но также и для Вас занимающий Ваше время, понимая вопрос. –  Emanuel Berg 23.12.2012, 01:03

Использование:

VER_URXVT=`urxvt -help 2>&1 | head -n 2`

который совпадает с:

VER_URXVT=$(urxvt -help 2>&1 | head -n 2)

получить первые две строки urxvt справка в VER_URXVT.

Если Вы хотите оценить команду в переменной оболочки, необходимо использовать eval:

VER_URXVT='urxvt -help 2>&1 | head -n 2'
eval $VER_URXVT
4
27.01.2020, 21:50

Я продолжаю думать, что функции лучше, чем evalпеременные uing

#!/bin/bash

version() { uname -a;}
wm() { head -n1 <(openbox --version);}
for f in $(compgen -A function)
do declare -f $f | sed '1,2d; $d'
   $f
done
3
27.01.2020, 21:50
  • 1
    Привет Watael, хорошая информация, если бы возможный помещенный :) –  Rahul Patil 24.12.2012, 13:11

никогда не использовать eval если Вы действительно не знаете то, что будет evalредактор.

вместо этого используйте функцию.

#!/bin/bash

ver_urxvt() { urxvt -help 2>&1 | head -n 2;}
declare -f ver_urxvt | sed '1,2d; $d'
ver_urxvt

но это глупо, поскольку это - пустая трата времени для печати той информации.

если Вы хотите отладить свое использование сценария -x опция set встроенный

2
27.01.2020, 21:50
  • 1
    Можно смотреть на сценарий, в котором мне нужно это. Таким образом, Вы видите, отдельные функции не опция. Что касается то, что Вы думаете, глупо или нет, это не важно, поскольку это - сайт Вопросов и ответов. Downvote. –  Emanuel Berg 23.12.2012, 01:23
  • 2
    @UlrichDangel: Когда я сказал, что мне был нужен он, который упомянул общее решение, в противоположность отдельным функциям для всех команд. Что касается eval, Я не знаю, как это отличается от обратных галочек /$(), но если Вы будете хотеть объяснить, почему это считают небезопасным, уверенным, я изменю его. –  Emanuel Berg 23.12.2012, 01:35
  • 3
    Вы спрашиваете. Я отвечаю. Ответ является мнением о том, как вещи должны быть обработаны вместо Вашей нерабочей, и контрпродуктивной идеи. Вопросы и ответы могут также показать то, что является лучшими практиками и говорит то, что хуже. btw: нет "привет", нет, никакое "спасибо"... Вы думаете, что мы должны Вам что-то? учитесь жить с другими, это улучшит Ваше кодирование также. –  watael 23.12.2012, 02:14
  • 4
    О чем же, спрашивается, Вы говорите?! 1. Сценарий работает точно, как предназначено с eval решение, 2...., который я благодарил, если Вы читаете комментарий выше, 3. модераторы часто удаляют поздравления, таким образом, я прекратил использовать их, хотя мне не удается видеть, как это - большая проблема и 4. Вы на самом деле ожидаете, что я поблагодарю Вас после вызова моего глупого вопроса, и мое желание распечатать информацию "пустая трата времени"? –  Emanuel Berg 23.12.2012, 02:26
  • 5
    ах, хорошо! Вы неправильно поняли меня: Вы не тратите впустую мое время, Вы бесполезно занимаете ресурсы машины для печати такой информации. –  watael 23.12.2012, 02:41

Теги

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