Не видя образец входа и по крайней мере ядра Вашего сценария, я могу только размышлять, что URL вмешиваются со злорадными йети пространства. Они известны за это безответственное поведение - Ваша единственная надежда состоит в том, чтобы назвать область 51 технической поддержкой.
Или, возможно, обеспечьте образец и сценарий здесь. Сумасшедшая идея, но это могло бы помочь. Анонимизируйте или запутайте их при необходимости, но не портя структуру XML-файла.
Я собираюсь предположить, что Вы используете простой regexp и указываете, что как правило, "анализируя" XML с regexps не хорошая идея - это хрупко, и легко перепутанный допустимым но неожиданным входом... пользуются xml парсинг библиотеки или функции или даже инструмента как xml2 для извлечения URL из XML-файлов.
Обратите внимание также, что, как подсказал Охотником на оленей выше, если URL содержат какие-либо пробелы или знаки пунктуации с особым значением к оболочке (например, &
, ?
, *
, и многие другие), необходимо будет заключить в кавычки или выйти из URL перед использованием его на wget командной строке. Как очень простой пример, использовать wget "$URL"
вместо просто wget $URL
- отметьте двойные кавычки вокруг переменной $URL.
С помощью (t)csh
, bash
или zsh
расширения истории вы могли бы написать:
vagrant up && !#:0 ssh
Но, серьезно, вы бы не
.Ты мог бы сделать:
eval vagrant\ {'up &&',ssh}
, но это не облегчило бы задачу.
Вы всегда можете сделать функцию
doall() {
cmd=$1; shift
for arg do
"$cmd" "$arg" || return
done
}
А потом:
doall vagrant up ssh
v=vagrant; $v up && $v ssh
Это может быть близко к тому, что вы ищете.
Вот функция, которая - в bash
- выведет первое слово в позиции команды для текущей составной команды:
rc() { $(set -f; unset IFS
set -- $(history 1)
IFS="(){};|'\\\"&#"
set \ $2;IFS=\ ;set -- $*
printf %s "$1") "$@"; }
С этим можно сделать:
vagrant up && rc ssh
Пример:
echo up && rc ssh
up
ssh
или....
set -x
(echo);rc 'times two'
+ echo
+ rc 'times two'
++ set -f
++ unset IFS
+++ history 1
++ set -- 549 '(echo);rc' ''\''times' 'two'\'''
++ IFS='(){};|'\''\"&#'
++ set ' ' echo '' rc
++ IFS=' '
++ set -- echo rc
++ printf %s echo
+ echo 'times two'
times two
Не ответ напрямую, но, возможно, стоит обратить внимание на две альтернативы (слишком много для комментария):
Псевдоним
Если вы многократно используете команду, вы можете вставить псевдоним в ваш ~/.bashrc
alias vassh="бродяга вверх && бродяга ssh".
История командной строки
Ctrl+R давайте выполним поиск предыдущих команд. Это будет намного быстрее, чем использование переменных...