не удалось создать список файлов в bash

Сценарий от @chris-johnsen выглядит так, как будто он будет работать, но объяснение имеет некоторые проблемы:

  • Для начала, vim - это termcap приложение. Он использует интерфейс termcap, например, ncurses.
  • ncurses предоставляет имена для функциональных клавиш, но приложения termcap видят только стандартные имена.
  • большинство сдвинутых функциональных клавиш - это расширенные возможности, как отмечено в базе данных терминала.
  • те, которые вас интересуют, находятся в разделе о xterm, где отмечено
    # Most of the xterm extensions are for function-keys.  Since patch #94 (in
    # 1999), xterm has supported shift/control/alt/meta modifiers which produce
    # additional function-key strings.  Some other developers copied the feature,
    # though they did not follow xterm's lead in patch #167 (in 2002), to make
    # these key definitions less ambiguous.
  • изменение, упомянутое в патче #167, меняет параметры для модификатора и keycode, чтобы избежать проблемы, что модификатор может быть принят за повторный счетчик для курсорных клавиш (в emacs, другом приложении termcap).
  • внесение изменений в xterm не сильно повлияло на vim, потому что (неудивительно) он использовал другое расширение "tcap-query", представленное в патче #148 для xterm.
  • используя vim в gnome-terminal или konsole, он не имел функции "tcap-query" и не имел возможности узнать, что посылают функциональные клавиши (помимо того, что пользователи заполняли информацию о привязке клавиш).
  • поскольку gnome-terminal и konsole (не знаю, кто из них был "первым", поскольку ни один из них не документирует ситуацию настолько хорошо) скопировали более раннее поведение из xterm, это породило по крайней мере десять лет сообщений об ошибках (таких, как этот вопрос). ncurses, кстати, предоставил правильные описания терминалов для этих терминалов, которые в основном не использовались. Вот вам и стандартизация.

По поводу стандартизации:

  • не существует "стандарта" как такового, который бы определял, какие функциональные клавиши будут посылать команды.
  • xterm начинался (с начала 1990-х годов, во всяком случае) с расширения клавиатуры vt220. В vt220 были определены F6-F20. F1-F5 были "локальными". Все, что выходило за эти пределы, появилось позже.
  • мотивация для расширения изначально исходила от клавиатур ПК (с 12 функциональными клавишами), которые не делятся равномерно на 20. Поэтому xterm получил 24 клавиши, используя shift (первоначально).
  • F1-F4 были особенными, потому что они также использовались для обеспечения PF1-PF4 для эмуляции vt100 в xterm. Они заканчиваются на P,Q,R,S, а не на "~". Учитывая сдвиг, это добавило одну из причуд, отмеченных в вопросе.
  • control-, meta-, появились позже, например, в патче #94. Вместо того, чтобы делать 12 реальных клавиш похожими на 24, можно было получить 48 (control и shift) с небольшим запасом (чтобы уложиться в ограничение terminfo/termcap в 60 функциональных клавиш).
  • изначально не было причин придумывать названия для дополнительных клавиш, но добавление модификаторов к другим специальным клавишам (курсорной и редакторской клавиатуре) последовало.
  • помогло то, что (примерно в то же время) существовало расширение ncurses для обеспечения расширенных имен.
  • хотя некоторые расширенные возможности (такие как AX) разработаны так, что их можно проверить из termcap, ни одна из расширенных специальных клавиш не может быть проверена с помощью интерфейса termcap.

0
15.04.2019, 10:44
1 ответ

Подбирает только один файл, потому что$1— это всего лишь один файл .

*интерпретируется при вызове скрипта, поэтому ваш вызов

sh merge_sam_pbs.sh bams-lab/*.name-sorted.fixmate.sorted.dedup.sam 

выдается как

sh merge_sam_pbs.sh "bams-lab/1.name-sorted.fixmate.sorted.dedup.sam" "bams-lab/2.name-sorted.fixmate.sorted.dedup.sam" "bams-lab/3.name-sorted.fixmate.sorted.dedup.sam"

с $1, тогда "bams-lab/1.name-sorted.fixmate.sorted.dedup.sam".


Вы хотите использовать "$@"в цикле for:

samlist=$(for sam in "$@"; do echo "I=$sam "; done)

или лучше заменить цикл for наprintf:

samlist=$(printf 'I=%s\n' "$@")

или даже лучше для вашего варианта использования, добавьте кавычки и пробел вместо новой строки:

samlist=$(printf 'I="%s" ' "$@")
1
28.01.2020, 02:40

Теги

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