настройки stty патологически изменены

Отказ от ответственности: Этот ответ соглашения с Bash конкретно, но большой частью его относится к вопросу относительно шаблонов шарика!

Звездообразный символ (*) подстановочный знак. Существует определенный набор символов, что он займет место и первый символ, являющийся точкой (.) не один из них. Это - особый случай только из-за того, как файловые системы Unix работают, файлы, которые запускаются с точки, считают "скрытыми". Это означает это инструменты такой как cp, ls, и т.д. не будет "видеть" их, если явно не сказали, чтобы сделать так.

Примеры

Сначала давайте создадим некоторые демонстрационные данные.

$ mkdir .dotdir{1,2} regdir{1,2}
$ touch .dotfile{1,2} regfile{1..3}

Таким образом, теперь у нас есть следующее:

$ tree -a
.
|-- .dotdir1
|-- .dotdir2
|-- .dotfile1
|-- .dotfile2
|-- regdir1
|-- regdir2
|-- regfile1
|-- regfile2
`-- regfile3

Теперь давайте играть в некоторые игры. Можно использовать команду echo перечислять что конкретный подстановочный знак (*) был бы для данной команды как так:

$ echo *
regdir1 regdir2 regfile1 regfile2 regfile3


$ echo reg*
regdir1 regdir2 regfile1 regfile2 regfile3

$ echo .*
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2

$ echo .* *
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2 regdir1 regdir2 regfile1 regfile2 regfile3

$ echo .dotdir*
.dotdir1 .dotdir2

Изменение поведения?

Можно использовать команду shopt -s dotglob изменить поведение * так, чтобы в дополнение к файлам как regfile1 это будет также соответствовать .dotfile1.

выборка от bash страница справочника

dotglob If set, bash includes filenames beginning with a `.' in the results 
        of pathname expansion.

Пример:

$ shopt -s dotglob
$ echo *
.dotdir1 .dotdir2 .dotfile1 .dotfile2 regdir1 regdir2 regfile1 regfile2 regfile3

Можно вернуться это поведение с этой командой:

$ shopt -u dotglob
$ echo *
regdir1 regdir2 regfile1 regfile2 regfile3

Ваша ситуация?

Для Вас Вы говорите cp то, что Вы хотите скопировать все файлы, которые соответствуют шаблону *, и нет никаких файлов.

$ cp foo/.* .

Или можно сделать это, если Вы хотите все в foo папка:

$ cp foo .

Или можно быть явными:

$ cp foot/.* foo/* .

Более компактная форма с помощью расширения фигурной скобки в bash:

$ cp foo/{.,}* .

В любое время можно использовать echo прием для наблюдения, что предложенные шаблоны файла (это - необычный термин для того, что звезда является частью).

$ echo {.,}*
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2 abc regdir1 regdir2 regfile1 regfile2 regfile3

Случайно, если Вы собираетесь скопировать каталог файлов + другие каталоги, Вы обычно хотите сделать это рекурсивно, это -R переключатель к cp:

$ cp -R foo/. .
4
19.04.2015, 03:34
1 ответ

Есть много способов сделать это. Способ, о котором вы упомянули, может быть одним из них. xterm - это программа, которая выполняет другую программу - она обертывает другую программу в pty - обычно Вашу оболочку - и направляет входные данные, которые Вы ее подаете, на обернутые программы. Дело в том, что псевдотерминалы - это просто эмулируемые устройства - и поэтому xterm угадывает, на каком устройстве Вы в конечном итоге будете набирать на нем текст. Конечно, можно получить гораздо более конкретную информацию. xterm учитывает все виды переменных окружения - а еще лучше - xresources.

Из man xterm:

  • ttyModes (класс TtyModes).
    • Определяет строку, содержащую ключевые слова терминала и символы, к которым они могут быть привязаны. Допустимые ключевые слова включают в себя: brk, dsusp, eof, eol, eol2, erase, erase2, flush, intr, kill, lnext, quit, rprnt, start, status, stop, susp, swtch и weras. Управляющие символы могут быть указаны как ^char (например, ^c или ^u) и ^? могут быть использованы для указания удаления (127). Используйте ^- для обозначения undef. Используйте \034 для обозначения ^\, так как буквенный обратный слеш в ресурсе X ускользает от следующего символа.
    • Это очень полезно для переопределения настроек терминала по умолчанию без необходимости делать stty каждый раз при запуске xterm. Однако обратите внимание, что программа stty на данном хосте может использовать различные ключевые слова; Таблица xterm является встроенной.
    • Если ресурс ttyModes указывает значение для стирания, то это отменяет настройку ресурса ptyInitialErase, т.е. xterm. инициализирует терминал для соответствия этому значению.
2
27.01.2020, 21:00

Теги

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