2015-05-25 144 views
0

我在下面在Ubuntu Linaro(在Parallella上)看到的奇怪行爲刻意撓頭。這scp命令正常工作本身:TCSH腳本和scp命令

$ scp [email protected]:~/myMPI/filename [email protected]:~/myMPI/ 

但是,一旦我把它包裝成一個腳本:

#!/bin/tcsh -f 

scp [email protected]:~/myMPI/$1 [email protected]:~/myMPI/ 

,併發出它,我得到這個:

$ thescript filename 

user: invalid user name 

沒有空格或用戶名中的句點,而且在命令行上也會失敗,而不僅僅是在腳本中。不過,tcsh以某種方式改變了scp命令。

幫助?

+2

腳本以'#!/ bin/sh -f'開頭,所以它是Bourne shell腳本,而不是tcsh腳本。 tcsh腳本需要'#!/ bin/tcsh -f',其中'-f'告訴shell不要加載啓動文件。 '/ bin/sh'的'-f'選項完全不同(它禁用了路徑名擴展),並且在這裏你不需要它。 –

+0

我的部分出現複製粘貼錯誤,現在已修復。不幸的是,問題依然存在。 – Urhixidur

+0

我無法重現該問題。這是你的tcsh腳本的* exact *內容,還是你修改了它的發佈? (用戶名真的是'用戶',主機名是'UNIT1'和'UNIT2'?) –

回答

0

Kenster釘了它:隱藏在腳本文件中用戶名前面的寄生$ C2(?)$ AD(軟連字符)字符對。我不確定他們是如何進入的(也不知道Leafpad沒有顯示它們的原因),但現在他們已經離開了,腳本按預期工作。

也感謝Keith Thompson的嘗試。

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文本。

+0

不是。用戶名是'linaro'。而且,如果出現這種情況,錯誤將再次顯示在命令行上。不,這是tcsh和scp之間的一些奇怪的交互。 – Urhixidur

+0

您可以嘗試通過「od -a」運行腳本文件,以查看是否有任何有趣的字符。 – Kenster