我对Ubuntu Linaro(在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命令。
帮助?
答案 0 :(得分:0)
以下是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文字。
答案 1 :(得分:0)
Kenster钉了它:在脚本文件中隐藏在用户名前面的寄生$ C2(Â)$ AD(软连字符)字符对。我不确定他们是如何进入的(也不是为什么Leafpad没有显示它们),但是现在它们已经消失了,脚本按预期运行。
还要感谢Keith Thompson的尝试。