TCSH脚本和scp命令

时间:2015-05-25 20:59:11

标签: scp csh tcsh

我对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命令。

帮助?

2 个答案:

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