Intereting Posts
Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути? Как мне управлять CentOS для долгосрочного использования продукции? Повреждение имени файла Как изменить файл без обновления времени модификации? Ошибка запуска Cygwin Putty: невозможно определить графическое окружение Поиск по страницам C ++ STL без необходимости добавлять «std ::» каждый раз Как вычесть строки, наоборот, только если больше, чем предыдущая строка Почему файлы обрабатывают скудный ресурс? Можно ли предоставлять разные цвета Xresources для разных терминальных приложений? zsh: Завершение табуляции для функции с помощью команд Git Заменить жесткий диск в ubuntu Как получить простые скрипты, которые, как представляется, нуждаются в корневых привилегиях для запуска через пользователя www-data? Как скопировать файл с одного сервера на другой с помощью промежуточного сервера? Остановить cron-скрипт от уничтожения моего зеркального списка неверными данными Извлечение текста с помощью sed не работает должным образом

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 в вашем доме, они будут расширены до имени, которое может отсутствовать на удаленном компьютере. Это не то, что вы хотите.