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 的尝试。