TCSH 脚本和 scp 命令
TCSH scripts and the scp command
我对 Ubuntu Linaro(在 Parallella 上)看到的以下奇怪行为感到抓狂。这个 scp 命令本身工作正常:
$ scp user@UNIT1:~/myMPI/filename user@UNIT2:~/myMPI/
但是一旦我将其包装到脚本中:
#!/bin/tcsh -f
scp user@UNIT1:~/myMPI/ user@UNIT2:~/myMPI/
并发出它,我明白了:
$ thescript filename
user: invalid user name
用户名中没有空格或句点,这在命令行上也会失败,而不仅仅是在脚本中。然而,tcsh 以某种方式破坏了 scp 命令。
帮忙?
这是 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 文本。
Kenster 搞定了:脚本文件中用户名前面隐藏着寄生的 $C2 (Â) $AD(软连字符)字符对。我不确定他们是怎么进去的(也不知道为什么 Leafpad 没有显示他们),但现在他们走了,脚本按预期工作。
也感谢 Keith Thompson 的尝试。
我对 Ubuntu Linaro(在 Parallella 上)看到的以下奇怪行为感到抓狂。这个 scp 命令本身工作正常:
$ scp user@UNIT1:~/myMPI/filename user@UNIT2:~/myMPI/
但是一旦我将其包装到脚本中:
#!/bin/tcsh -f
scp user@UNIT1:~/myMPI/ user@UNIT2:~/myMPI/
并发出它,我明白了:
$ thescript filename
user: invalid user name
用户名中没有空格或句点,这在命令行上也会失败,而不仅仅是在脚本中。然而,tcsh 以某种方式破坏了 scp 命令。
帮忙?
这是 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 文本。
Kenster 搞定了:脚本文件中用户名前面隐藏着寄生的 $C2 (Â) $AD(软连字符)字符对。我不确定他们是怎么进去的(也不知道为什么 Leafpad 没有显示他们),但现在他们走了,脚本按预期工作。
也感谢 Keith Thompson 的尝试。