2014-09-05 91 views
0

如果有人能請讓我知道一個UNIX變量可以採用的總長度是多少。 我有一個名爲文件列表變量,我想保存這樣的內容:UNIX中變量的長度

文件清單=路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱路徑/名稱路徑/名稱路徑/名稱路徑/名稱 路徑/名稱.....無限

+1

哪個外殼?我假設BASH? – Joe 2014-09-05 08:15:58

+0

你最好使用一個文件來存儲它。無論如何你必須管理這些數據。我不真誠地知道,但我確定這是一個更好的方式做到這一點 – wonderwhy 2014-09-05 08:16:20

+0

好的...我需要這個,因爲我想稍後做scp $ filelist id @remotohost:path – user3905438 2014-09-05 08:17:57

回答

2

有兩個限制。第一個是在殼內。我想bash不會限制其變量,真正的限制是可用資源(如果malloc失敗)。

更重要的一個(與您的scp $filelist [email protected]:path案例相關)是當您使用該變量時,例如,執行一些程序。然後調用execve(2),它可能會失敗,因爲整個程序參數佔用太多的內存。閱讀有關的參數大小和環境手冊頁部分限制:

對參數的大小和環境

Most UNIX implementations impose some limit on the total size of the 
    command-line argument (argv) and environment (envp) strings that may 
    be passed to a new program. POSIX.1 allows an implementation to 
    advertise this limit using the ARG_MAX constant (either defined in 
    <limits.h> or available at run time using the call 
    sysconf(_SC_ARG_MAX)). 

實際上限制了execve限制是顯著(如128K字節的默認)。編輯某些內核頭文件後,我經常編譯自己的內核以提高該限制(例如,達到1Mbyte)。

請注意,一個變量是export -ed在bash進入(未來分叉進程的)環境受上述限制。

順便說一句,你可以通過其他方式傳輸文件(rsyncgit等)。