Intereting Posts
Как я могу игнорировать временные сбои в сценариях, выполняемых cron? Какие дистрибутивы Linux имеют самую высокую базовую базу по состоянию на середину 2010 года? Развернуть меньше, чем знак при использовании multios и brace expand Ошибка ./c.sh: строка 24: [: слишком много аргументов в программе оболочки Скопировать файлы с переименованием не удается создать / dev / shm Как дублировать мой установочный раздел на раздел btrfs? В чем разница между Regex ` * и` + `? Каковы файлы и приложения, которые управляют конфигурацией клавиатуры и мертвых ключей в KDE? Установить пакеты локально (без учетной записи root) Как установить libxcb Linux – iptables – использование потоковых байтов YouTube Разделение имен, разделенных символом «| характер "для отдельных пар Классификация файлов файлов Linux Как скопировать все каталоги в каталоге в файлы tar, названные в честь тарированных каталогов

scp, globbing и различные оболочки

На днях я пробовал делать

scp remotehost:~/*.txt . 

и я получил ошибку в *.txt file not found * , *.txt file not found извините, а не на работе, и я забыл точную ошибку

на моей рабочей станции я запускаю zsh 4.3. на remotehost bash – оболочка по умолчанию, а версия zsh старше ( 4.2 против 4.3 ). Затем я попытался переключиться на bash на своей рабочей станции и выполнил ту же самую команду. На этот раз это сработало. Какова корневая причина этого. Есть ли способ сделать глобусы или подстановочные знаки между этими двумя системами (без переключения на bash)?

Поведение zsh здесь немного отличается от большинства других оболочек. Другие оболочки, например bash, пытаются расширить подстановочные знаки. Если они не могут расшириться до чего-либо, они передают буквальную строку (содержащую подстановочные знаки) вместо приложения. Но zsh этого не делает (ну, есть вариант для этого, сделать это или нет). Zsh напечатает эту ошибку и не выполнит команду. Вы можете переопределить это, экранируя подстановочный знак, если вы действительно хотите, чтобы он передавался в приложение. В этом случае вы делаете это, так как хотите, чтобы другая сторона оболочки расширила его. Поэтому используйте:

 scp remotehost:\*.txt . 

Это на самом деле правильное поведение, так как если у вас есть локальные файлы * .txt в вашем доме, они будут расширены до имени, которое может отсутствовать на удаленном компьютере. Это не то, что вы хотите.