TERM=vt100 vimdiff
должен вызвать vimdiff с ТЕРМИНОМ временно набор к vt100. (пока команда не заканчивается). Это помогает судить других: xterm или xterm-цвет или xterm-256color, и т.д.
Вывод от 3 ls
команды передаются до paste
команда, которая объединяет их в значение:
$VOLTDB_VOLTDB"/voltdb-*.jar:$VOLTDB_LIB"/*.jar:$VOLTDB_LIB"/extension/*.jar
Примечание: Переменные $VOLTDB_VOLTDB
и $VOLTDB_LIB
будет расширен и может быть больше значений, чем всего один файл для каждого из них ls
команды. Посмотрите *
там? Это - символ шарика, который действует как подстановочный знак и расширяется до чего-либо между левой стороной (voltdb-) и правой стороной (.jar), например.
Они соответствовали бы:
voltdb-1.jar
voltdb-blah.jar
voltdb-12345.jar
Все затем включено в переменную APPCLASSPATH
:
APPCLASSPATH=$CLASSPATH:$VOLTDB_VOLTDB"/voltdb....etc.
Вот пример, где я использую seq
команда для генерации последовательности чисел, 1-10.
$ seq 10 | paste -sd ':' -
1:2:3:4:5:6:7:8:9:10
Вы видите что paste
команда объединяет вывод и разделяет его с двоеточием (:
).
Можно также подражать команде в качестве примера как это:
$ { echo "hi1"; echo "hi2"; echo "hi3"; } | paste -sd ':' -
hi1:hi2:hi3
Примечание: -
к вставке команда говорит этому брать вход от STDIN и печатать каждый аргумент, как она входит, разделенная a :
.
С различными переключателями к paste
это может также быть сделано разделить данные на группы, на основе количества -
после него.
Вот пример с 2 -
.
$ seq 10 | paste - -
1 2
3 4
5 6
7 8
9 10
Вот 3 -
.
$ seq 10 | paste - - -
1 2 3
4 5 6
7 8 9
10
Таким образом, это говорит paste
сколько аргументов paste
должен распечатать на каждой строке. Но не смущайтесь, пример, с которым Вы имеете дело, просто берет вход от STDIN, разделяя каждый аргумент на пробелах, и печатая сопровождаемый a :
. При предоставлении нескольким -
Вы говорите paste
взять аргументы, 2 и время, 3 за один раз, и т.д.
Аргументы 2 за один раз, разделенный :
:
$ seq 10 | paste -d ':' - -
1:2
3:4
5:6
7:8
9:10
$ seq 10 | paste -d ':' - - -
1:2:3
4:5:6
7:8:9
10::
Кстати, если Вы включаете -s
переключатель Вы говорите paste
взять аргументы последовательно (последовательно). Наблюдайте то, что происходит, когда Вы используете его на одном из примеров выше.
2 за один раз:
$ seq 10 | paste -sd ':' - -
1:2:3:4:5:6:7:8:9:10
3 за один раз:
$ seq 10 | paste -sd ':' - - -
1:2:3:4:5:6:7:8:9:10
$(command)
выполняет команду и заменяет ее выводом.
{ list; }
команда группы, выполняя несколько команд в текущей среде оболочки. Это подобно (list)
, но это не делает подоболочку.
\command
используется для игнорирования псевдонимов к командам, которые могут измениться, команды значительно ожидали поведение.
\
в конце строки просто означает, что эта строка продолжается, таким образом, оболочка будет рассматривать следующую строку как часть текущей. Обычно не необходимый, когда это очевидно из контекста (открывающая скобка или кавычка).
APPCLASSPATH=$CLASSPATH:$({ \ \ls -1 "$VOLTDB_VOLTDB"/voltdb-*.jar; \ \ls -1 "$VOLTDB_LIB"/*.jar; \ \ls -1 "$VOLTDB_LIB"/extension/*.jar; \ } 2> /dev/null | paste -sd ':' - )
\ls
похож ls
, за исключением того, что, если ls
псевдоним, обратная косая черта предотвращает расширение псевдонима. Это гарантирует что ls
команда используется и не некоторый псевдоним, который мог бы добавить нежелательный вывод, такой как суффикс классификатора (-F
).
ls
команды, названные с существующими именами файлов как аргументы, перечисляют свои аргументы, один на строку. Опция -1
не имеет никакого эффекта начиная с вывода ls
идет в канал а не в терминал. Если ls
получает аргумент, который не является названием существующего файла, оно ничего не отображает на своем стандартном выводе и отображает ошибку вместо этого. Ошибки от ls
команды не перенаправляются к нигде 2> /dev/null
. Существует две причины почему ls
мог бы получить аргумент, который не является файлом: если одна из переменных не обращается к существующему, читаемому каталогу, или если нет никакого файла, соответствующего подстановочному шаблону. В любом случае шаблон передается нерасширенный до ls
.
Обратные косые черты в конце строк заставляют оболочку игнорировать следующую новую строку. Ни один из них не полезен здесь, с тех пор в каждой точке, где там используются, оболочка ожидает дополнительную новую строку.
Фигурные скобки {…} группируют команды. Составная команда { \ls …; \ls …; \ls … ; }
передается по каналу в paste
и перенаправили его ошибки к /dev/null
.
paste
управляйте присоединяется ко всем входным строкам с a :
промежуточный. Это эквивалентно tr '\n' :
за исключением того, что это не помещает a :
в конце.
Замена команды $(…)
вызывает вывод paste
быть интерполированным в APPCLASSPATH
, после значения CLASSPATH
переменная с двоеточием для разделения этих двух частей.
Вот упрощенная версия. Это немного отличается из оригинала в этом, если ни один из подстановочных шаблонов ничему не соответствует, APPCLASSPATH
будет равно CLASSPATH
без дополнительного запаздывающего двоеточия (который, вероятно, желателен).
APPCLASSPATH=$CLASSPATH:$(
\ls "$VOLTDB_VOLTDB"/voltdb-*.jar "$VOLTDB_LIB"/*.jar "$VOLTDB_LIB"/extension/*.jar |
tr '\n' :) 2>/dev/null
APPCLASSPATH=${APPCLASSPATH%:}
paste
умный путь состоит в том, чтобы получить результаты в aPATH
разделенный от двоеточия формат. – kurtm 10.10.2013, 23:30-
. – slm♦ 10.10.2013, 23:59