我对在Ubuntu下(在Parallella上)看到的以下奇怪行为感到抓挠。这个scp命令本身工作正常:
$ scp user@UNIT1:~/myMPI/filename user@UNIT2:~/myMPI/但是一旦我把它包装成一个脚本:
#!/bin/tcsh -f
scp user@UNIT1:~/myMPI/$1 user@UNIT2:~/myMPI/发布它,我明白了:
$ thescript filename
user: invalid user name用户名中没有空格或句点,这在命令行上也会失败,而不仅仅是在脚本中。然而,tcsh在某种程度上破坏了scp命令。
帮助?
发布于 2015-05-29 18:51:19
Kenster指出:脚本文件中的用户名前面隐藏着寄生式$C2 () $AD (软连字符)字符对。我不知道他们是怎么进去的(也不知道为什么Leafpad不给他们看),但是现在他们走了,脚本就像预期的那样工作。
也要感谢基思·汤普森的努力。
发布于 2015-05-27 16:23:44
下面是scp程序中发出该错误的代码:
int
okname(char *cp0)
{
int c;
char *cp;
cp = cp0;
do {
c = (int)*cp;
if (c & 0200)
goto bad;
if (!isalpha(c) && !isdigit((unsigned char)c)) {
switch (c) {
case '\'':
case '"':
case '`':
case ' ':
case '#':
goto bad;
default:
break;
}
}
} while (*++cp);
return (1);
bad: fprintf(stderr, "%s: invalid user name\n", cp0);
return (0);
}它不接受包含序数值超过127的字符或某些标点符号的用户名。据推测,脚本中被编辑的用户名之一违反了这些条件之一。无意中,我首先怀疑的是,这里有一个重音字符,或者是一些unicode文本。
https://stackoverflow.com/questions/30445930
复制相似问题