3

Я использую tcsh и определяю переменную среды следующим образом:

setenv mycomp myusername@my.computer.com

так что, когда мне нужно скопировать файлы с удаленного my.computer.com, я набираю следующее:

scp $mycomp:sourcepath destpath

Но когда я делаю это, я получаю следующую ошибку: «Bad: модификатор в $ (m)». где (m) - первый символ после двоеточия.

Что говорит мне эта ошибка, и как я могу это исправить?

2 ответа2

5

Расширение переменной с двоеточием после него обрабатывает буквы после двоеточия как модификаторы.

Например, $dir:h означает расширение $dir с помощью модификатора h . h означает голову, то есть все, кроме последней части пути.

% set dir=/home/user
% echo $dir:h
/home

Вся информация находится на справочной странице tcsh(1):

History substitution

   ...

   The word or words in a history reference  can  be  edited,  or  ‘‘modi-
   fied’’,  by following it with one or more modifiers, each preceded by a
   ‘:’:

       h       Remove a trailing pathname component, leaving the head.
       t       Remove all leading pathname components, leaving the tail.
       r       Remove a filename extension ‘.xxx’, leaving the root  name.
       e       Remove all but the extension.
       u       Uppercase the first lowercase letter.
       l       Lowercase the first uppercase letter.
       s/l/r/  Substitute  l  for  r.
       ...


Variable substitution

   ...

   The ‘:’ modifiers described  under  History  substitution,  except  for
   ‘:p’,  can be applied to the substitutions above.

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

scp ${mycomp}:sourcepath destpath
0

Хотя у меня нет среды tcsh, чтобы проверить это, я думаю, что когда оболочка ищет переменную вашей среды, она не разделяется на: и ищет $ mycomp: sourcepath в качестве полного имени переменной.

Я бы попробовал наложить алиас на вашу команду scp.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .