我正在使用 tcsh 并定义一个环境变量如下:
setenv mycomp [email protected]
因此,当我需要从远程 my.computer.com 复制文件时,我输入以下内容:
scp $mycomp:sourcepath destpath
但是当我这样做时,我收到以下错误:“错误:$(m)中的修饰符。”其中(m)是冒号后的第一个字符。
这个错误告诉我什么?我该如何修复它?
答案1
后面带有冒号的变量扩展将冒号后面的字母视为修饰符。
例如,表示用修饰符$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
答案2
虽然我没有 tcsh 环境来测试这个,但我猜测当 shell 寻找你的环境变量时,它不会在 : 上分离并寻找 $mycomp:sourcepath 作为整个变量名。
我会尝试为您的 scp 命令添加别名。