Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 4

0
votes
answers
54 views
+10

服務器vsFTPd連接失敗

-1

我試圖在ftp localhost上連接,但登錄名/密碼總是失敗。 我已經安裝了vsFTPd。 我想我必須修改passwd.conf。但我該如何處理? 我有這條線:服務器vsFTPd連接失敗

paul:x:1000:1000:paul,,,:/home/paul:/bin/false 

謝謝!

+1

請將您的問題移到[su]或[sf](在這裏刪除,重新發布)。這是[off-topic here](// stackoverflow.com/help/on-topic)。 –

沙发
0
0

您可以使用passwd(enter)設置新密碼。 或以root權限登錄並鍵入(sudo)passwd [username],然後更改密碼。

也許需要改變配置FTP服務器,並在/etc/vsftpd/vsftpd.conf文件配置設置local_enable=YESchroot_local_user=YES,用於允許用戶/etc/passwd登陸。

0
votes
answers
65 views
+10

腳本/命令合併3個文件保留最後的文件名

-1

我有要求,我有多個文件(頭文件,尾部文件和數據文件)需要合併成一個文件保留文件名。腳本/命令合併3個文件保留最後的文件名

輸入文件

WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_1.TXT (Header file) 
WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_2.TXT (data file) 
WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_3.TXT (trailer file) 

WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_1.TXT (Header file) 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_2.TXT (data file) 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_3.TXT (trailer file) 

輸出文件應具有相同的順序和文件名應該是這樣的文件中的數據。

WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7.TXT 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3.TXT 

需要快速幫助來實現這一點。

在此先感謝。

+3

所以你的意思是創建一個shell腳本?你有多遠?在你的問題中包含你的腳本。 – mattias

+0

這將是'cat'的有用用法 –

+0

我試過這個 ls | awk -F'_''!x [$ 1] ++ {print $ 1}'|同時讀取-r行 做 cat $ line >> $ line .txt 完成它創建具有正確數據的臨時文件,但我需要重命名文件名,如上所述,並刪除現有文件。只保留最終文件。 – VTIN

沙发
0
0

假設所有的文件名是在你的問題中顯示的格式(即,9場單下劃線分隔)...

一些樣本數據:

$ for f in WP*_?_?.TXT 
do 
    echo "+++++++ $f" 
    cat $f 
    echo "" 
done 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_1.TXT 
2024916 header 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_2.TXT 
2024916 data 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_3.TXT 
2024916 trailer 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_1.TXT 
2024078 header 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_2.TXT 
2024078 data 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_3.TXT 
2024078 trailer 

因爲我對於這個簡單的情況下,選擇使用cut代替awk(少一點打字)以提取公共/基本文件前綴:

$ ls WP*_?_?.TXT | cut -d"_" -f1-8 | sort -u | while read -r fprefix 
do 
    # concatenate source files 
    cat ${fprefix}_[123].TXT > ${fprefix}.TXT 

    # display concatenated files 
    echo "+++++++ ${fprefix}.TXT" 
    cat ${fprefix}.TXT 
    echo "" 
done 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3.TXT 
2024916 header 
2024916 data 
2024916 trailer 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7.TXT 
2024078 header 
2024078 data 
2024078 trailer 
+0

非常感謝你..它的工作,只有很小的變化,我做了刪除WP從LS命令,因爲我可以有文件名也以其他字母開頭..更多的事情,我想在這裏添加的是我想刪除3個源文件,並只保留最終文件..我可以刪除.. ..? – VTIN

+0

如果'$ {fprefix}'是正確的,你可以刪除3x源文件,如:'rm $ {fprefix} _?_ ?. TXT' – markp

+0

再次感謝您的大力幫助......您是天才! !你讓我今天一整天都感覺很好 !!!!!!這裏是我正在使用的最終代碼****************************************** ******* ls * _?_ ?. TXT | cut -d「_」-f1-8 | sort -u |而讀-r fprefix 做 #串連的源文件 貓$ {fprefix} _ [123] .TXT> $ {fprefix} .TXT #顯示級聯文件 回聲「+++++++ $ {fprefix } .TXT「 cat $ {fprefix} .TXT rm $ {fprefix} _ ?. TXT echo」「 done ******************** ********************** – VTIN

板凳
0
0
ls *_?_?.TXT | while read -r filename 
do 
    # concatenate source files 
    cat $filename >> ${filename%_*}.TXT 
    rm $filename 
done 

將文件內容添加到編號部分被切斷的目標文件。

不需要cutsort,但不覆蓋現有的目標文件。

0
votes
answers
57 views
+10

從舊的文件夾中刪除文件

0

我需要刪除14天以前的文件。從舊的文件夾中刪除文件

CMD中:

find ${FILES_DIR}/*.zip -mindepth 1 -mtime +14 -delete 

這工作得很好。但是,如果文件夾中沒有zip文件,該怎麼辦?這是拋出一個錯誤。如何處理案件?

+0

你所說的「拋出一個錯誤」虛假的錯誤信息在這種情況下的意思。?將標準錯誤重定向到'/ dev/null'。 –

沙发
0
1

第一個參數是從哪裏開始搜索。 名的文件名,模式與-name '<pattern> 給您應該使用

find ${FILES_DIR} -name '*.zip' -mtime +14 -delete

在表單中的find得到起點的名單,但沒有任何搜索。

-mindepth 1不到風度似乎有效果。也許你想用-maxdepth 1來限制搜索到提到的目錄,沒有別的。 (把它放在-name之前避免警告

您可以考慮使用-ls -delete - 至少你可以看到已被刪除

0
votes
answers
51 views
+10

爲什麼要在struct之前添加標識符?我看不出爲什麼,如何解決這個問題?

-5

這是在我的.c文件中的代碼: enter image description here爲什麼要在struct之前添加標識符?我看不出爲什麼,如何解決這個問題?

這是錯誤: enter image description here

+0

請張貼您的代碼。 –

+0

如果你在這裏發帖,你應該至少發佈代碼,並給出關於當前代碼的問題和錯誤的確切描述。 –

+2

實際的問題出現在'list.h'裏面,或者出現在你顯示的片段上面。我們需要看到_complete program_,作爲文本,否則我們將無法爲您提供幫助。請閱讀並按照https://stackoverflow.com/help/mcve上的說明進行操作。 – zwol

沙发
0
1

當你得到像

[file]:[line]:[column]: expected [punctuation] before [keyword] 

該問題的錯誤消息通常是與代碼之前編譯器在抱怨的行。舉例來說,你會得到這樣的錯誤時,與先前的聲明或陳述不正確結束:

struct THING { } // oops! forgot a semicolon on this line 
struct OTHER { }; // compiler complains here, but the problem is up there 

這是因爲編譯器並不「知道」有一個問題,直到它處理的開始第二個聲明。

在C中,要找到「正好在該行之前」的代碼,您可能必須查看過去或進入預處理器指令。在您的代碼段

#include "list.h" 
#define true 1 
#define false 0 
struct NODE *head; 

當編譯器解析struct NODE ...,該#define指令是不存在了,而#include "list.h"已被替換的文件list.h的內容。所以,可能是缺少分號或list.h內的任何內容。

沒有看到您的完整程序,我不能更具體。

+0

感謝您的幫助!我明白你的意思! –

板凳
0
1

編譯器會發出錯誤的它看到預處理的代碼,所以你必須考慮到,代碼如下所示後附帶的「list.h」已經擴大。

該文件末尾的內容很可能是導致錯誤的原因 - 例如,在結構定義結尾處缺少分號。

0
votes
answers
71 views
+10

向遠程主機發出bash命令 - 寫入本地輸出文件時出錯

0

我試圖在幾臺遠程主機上並行運行多組命令。 我已經創建了構建這些命令,然後在本地文件沿線的寫入輸出,事情的腳本:向遠程主機發出bash命令 - 寫入本地輸出文件時出錯

ssh <me>@<ip1> "command" 2> ./path/to/file/newFile1.txt & ssh <me>@<ip2> 
"command" 2> ./path/to/file/newFile2.txt & ssh <me>@<ip2> "command" 2> 
./path/to/file/newFile3.txt; ...(same repeats itself, with new commands and new 
file names)... 

我的問題是,我的腳本運行這些命令時,我得到出現以下錯誤:

bash: ./path/to/file/newFile1.txt: No such file or directory 
bash: ./path/to/file/newFile2.txt: No such file or directory 
bash: ./path/to/file/newFile3.txt: No such file or directory 
... 

這些文件不存在但將被寫入。話雖如此,目錄路徑是有效的。

奇怪的是,如果我複製並粘貼整個大命令,那麼它的工作原理沒有任何問題。我寧願讓它自動化;)。

任何想法?

編輯 - 詳細信息:

我的文件系統是以下幾點:

- home 
    - User 
    - Desktop 
     - Servers 
     - Outputs 
      - ... 

我從家裏/用戶/桌面運行bash腳本/服務器。 該腳本創建需要在遠程服務器上運行的命令。首先,腳本創建文件將被存儲的目錄。

outputFolder="./Outputs" 
... 
mkdir -p ${outputFolder}/f{fileNumb} 
... 

腳本然後繼續創建將遙控器上的主機被稱爲命令,並且它們各自的輸出將被放置在所創建的目錄中。 目錄在那裏。運行這些命令會給我帶來錯誤,但是打印然後將這些命令複製到同一位置會出於某種原因。我也試圖給出目錄的完整路徑,仍然是同樣的問題。

希望我已經更清楚了一點。

+1

必須存在重定向才能工作的路徑(中間目錄不是自動創建的)。所以'mkdir -p path/to/file'在重定向'> path/to/file/newFile.txt'之前。 –

+0

您的問題似乎並未包含足夠的相關信息以允許投機以外的任何內容。請提出問題的[最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve),以便所有相關信息(以及最小不相關信息)都在這裏。 –

+0

你的問題*仍然*沒有包含足夠的信息來真實地告訴發生了什麼 - 這就是創建一個MCVE的要點。但是你提到的「創建命令」讓我感到懷疑 - 你是否試圖在執行它們之前將命令存儲在變量中?如果是這樣,有很多事情可能會出錯。參見[BashFAQ#50:我試圖把一個命令放在一個變量中,但複雜的情況總是失敗!](http://mywiki.wooledge.org/BashFAQ/050)。 –

沙发
0
1

如果這是你得到確切的錯誤消息:

bash: ./path/to/file/newFile1.txt: No such file or directory 

然後你會注意到,有冒號和點之間的額外的空間,所以它實際上是試圖打開一個名爲" ./path/to/file/newFile1.txt"文件(不引號)。

但是,要實現這個目標,你需要在重定向使用引號將文件名,如

something ... 2> " ./path/to/file/newFile1.txt" 

還是第一個字符必須比常規的空間別的東西。一個非破壞性的空間也許可能是某些編輯可能創建的,如果你碰到了alt-space或其他類似的東西。

+0

是個好主意,但我再次檢查過,並且有一個空間。 – dtam

板凳
0
1

我不相信你已經證明足以正確回答這個問題。

這看起來不像ssh的問題,而是你調用(ssh)命令的方式。

你說你正在將這些命令寫入一個文件中......假設你正在將該文件作爲腳本運行。你可以展示你用來做這件事的代碼嗎?我相信那是你的問題。

我懷疑你對運行腳本時工作目錄的改變方式做出了錯誤的假設。它沒有。你正在列出相對路徑,所以瞭解它們相對於什麼是重要的。這是複製和粘貼時最有可能工作的原因......您正在從不同的工作目錄執行。

+0

當我複製並粘貼它時,我在與正在運行的腳本相同的位置執行此操作。如果有幫助,我已經編輯了一些更多信息的原始文章。 – dtam

地板
0
0

我是新來的bash腳本,並基於我見過的另一個建立我的腳本。我簡單地調用存儲已命令變量「運行」命令:

$cmd 

解決使用:

eval $cmd 

代替。我的不好,應該從一開始就給出完整的腳本。

0
votes
answers
81 views
+10

使用nano中的當前時間戳創建新的列在Hive中

1

我想在nano表中使用當前時間戳在nano秒中創建一列。我怎麼能在插入數據時做到這一點?使用nano中的當前時間戳創建新的列在Hive中

沙发
0
1

當前current_timestamp功能蜂巢,不納秒時間。

但是你總是可以用create your own functions使用配置單元UDF來處理nano秒時間戳。

下面是UDF的示例,它將返回納秒時間的值long

import org.apache.hadoop.hive.ql.exec.UDF; 
import org.apache.hadoop.hive.ql.udf.UDFType; 

@UDFType(stateful = true) 
public class NanoTimeUdf extends UDF{ 

    public long evaluate() { 
     return System.nanoTime(); 
    } 

} 

創建一個JAR出上面的Java代碼(說tonanotime.jar),並添加JAR創建UDF函數返回當前時間納米。

ADD JAR /home/amit/tonanotime.jar; 
create TEMPORARY FUNCTION toNanoTime AS 'NanoTimeUdf'; 

現在,toNanoTime功能可用,您可以選擇查詢使用插入到新表,如: e.g

insert into table select toNanoTime() from other_table; 
0
votes
answers
115 views
+10

Facebook SDK返回不正確的事件時間

0

我有一個網站,顯示來自網站所有者的Facebook頁面的事件。幾個星期前,有人注意到網站上的事件時間顯示錯誤,但他們在幾年內都是正確的。所以基本上我試圖找出問題所在。Facebook SDK返回不正確的事件時間

下面是一個例子

事件X擁有2017-12-18T17的開始時間時間戳:00:00-0500。那個日期是正確的,那個時間 - 1700或5:00 - 是正確的時間。

所以我有這樣的代碼的時間戳轉換的東西我可以顯示

$start_time = date('g:i a', strtotime($event['start_time'])); 

這返回的10:00 PM

時間我與結束時間不正確地轉換了同樣的問題。

我使用此代碼轉換的日期(使用上述相同的時間戳):

$start_date = date('l, F j, Y', strtotime($event['start_time'])); 

這將返回正確的日期,這讓我困惑甚至更多,因爲如果日期正確轉換,請問該怎麼時間不正確轉換?

有人可以幫助我得到轉換的時間,所以我可以在網站上獲得這些事件嗎?

+0

看起來像不同的時區問題。 –

+0

'date('P')'的輸出是什麼? – Ben

+0

@本日期('P')輸出爲+00:00 –

沙发
0
1

這是不同的時區問題。

你有一個帶時區的日期時間-05:00但是,date('P')輸出,你的服務器時區是+00:00。您可以使用DateTime類將日期時間轉換爲您想要的時區。

// convert time to datetime instance 
$timestamp = strtotime($event['start_time']); 
$datetime = new DateTime; 
$datetime->setTimestamp($timestamp); 

// set timezone to US/Eastern, Eastern Standard Time (EST), UTC -5 
$datetime->setTimezone(new DateTimeZone('US/Eastern')); 

// output datetime format 
$datetime->format('g:i a'); 
$datetime->format('l, F j, Y'); 
+0

您是一位紳士和學者。謝謝! –

0
votes
answers
67 views
+10

Python發送郵件,錯誤

0

當我使用python從unix服務器發送郵件時,我收到了額外的內容,如下所示sendmail.此內容顯示在郵件中。Python發送郵件,錯誤

From nobody Mon Dec 18 09:36:01 2017 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit 

我的代碼如下。

#reading data from file 
    data = MIMEText(file('%s'%file_name).read()) 
    #writing the content as html 
    content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>"+'%s'%data+"</body></html>", "html") 
    msg = MIMEMultipart("alternative") 

    msg["From"] = "[email protected]" 
    msg["To"] = "[email protected]" 
    msg["Subject"] = "python mail" 

    msg.attach(content) 

    p = Popen(["/usr/sbin/sendmail", "-t","-oi"], stdin=PIPE,universal_newlines=True) 
    p.communicate(msg.as_string()) 
+0

你是說你不期待「text/plain」內容以及html內容? – snakecharmerb

+0

我只是想避免這種情況,警告。我的文件內容是一個html數據,但是當我收到郵件時,我在消息上方看到這個警告。我想禁用它。 –

+0

我懷疑你還需要明確標識數據爲「html」。 'data = MIMEText(無論,「html」)'。 –

沙发
0
2

您正在構建的電子郵件的內容分爲兩個部分,如datacontent。您需要明確確認兩者都是HTML。因此,改變

data = MIMEText(file('%s'%file_name).read()) 

data = MIMEText(file('%s'%file_name).read(), "html") 
+0

謝謝,其實我的錯誤是,我已經添加到多個HTML標頭的數據,步驟: '含量= MimeText用於( 「<!DOCTYPE HTML> 」+ '%s' 的%數據+「」, 「HTML」)' 是沒有必要的,只是讀取文件作爲HTML的內容很好。 –

板凳
0
1

你應該看看消息字符串。你看到的消息不是警告,這正是已writen到消息:

data = MIMEText(file('%s'%file_name).read()) 
content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>" 
    +'%s'%data+"</body></html>", "html") 

data.as_string()實際上包含Content-Type: text/plain; ...,因爲它已經由第一MIMEText線,當你想包括加入它進入HTML頁面的主體。

你真正想要的可能是:

data = file(file_name).read() 
content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>" 
    +'%s'%data+"</body></html>", "html") 

但我也認爲你不需要它包括與一個MIMEMultipart("alternative")另一個層面:msg = content可能是不夠的。

最後,我不認爲這明確地開始一個新的進程來執行的sendmail是真的矯枉過正,當從標準庫aloready的smtplib模塊知道如何發送消息:

import smtplib 

server = smtplib.SMTP() 
server.send_message(msg) 
server.quit() 
+0

謝謝,其實我的錯誤是,我已經添加到多個HTML標題的數據,步驟: 'content = MIMEText(「<!DOCTYPE HTML> 「+ '%s' 的%數據+」」, 「HTML」)' 是沒有必要的,只是讀取文件內容爲HTML是好的 –

+1

@arun:如果你不再需要這個問題的幫助,如果答案有幫助,你應該接受一個。 –

0
votes
answers
49 views
+10

在sed命令中正則表達式不正確

0

我想在批處理控制檯中使用sed替換一些字符串。我的輸入包括在文件中有這樣的詩句:在sed命令中正則表達式不正確

$ head qiimetax_sorted.txt 

A61579.1.1437 
D_0__Bacteria;D_1__Thermotogae;D_2__Thermotogae;D_3__Thermotogales; 
D_4__Fervidobacteriaceae;D_5__Fervidobacterium;Ambiguous_taxa;D_7__; 
D_8__;D_9__;D_10__;D_11__;D_12__;D_13__;D_14__ 
AAAA02020712.626.2096 
D_0__Bacteria;D_1__Proteobacteria;D_2__Alphaproteobacteria;D_3__Rhizobiales; 
D_4__Bradyrhizobiaceae;D_5__uncultured;D_6__Oryza sativa 
Indica Group (long-grained rice);D_7__;D_8__;D_9__;D_10__;D_11__;D_12__; 
D_13__;D_14__ 

現在我試圖抹去這個sed命令的名字前的「D_number__」字符串,它沒有任何替換:

sed -r 's/D_d+__//g' qiimetax_sorted.txt > qiimesed.txt 

任何想法是哪個問題? 謝謝!

+0

也見[爲什麼在X,但不以y我的正則表達式的工作?](HTTPS:/ /unix.stackexchange.com/questions/119905/why-does-my-regular-expression-work-in-x-but-not-in-y) – Sundeep

沙发
0
2

你的正則表達式語法是perl like。

所以,如果你想保留它:

perl -pe 's/D_d+__//g' qiimetax_sorted.txt > qiimesed.tx 

sed -r 's/D_[0-9]+__//g' qiimetax_sorted.txt > qiimesed.tx 
+2

建議:使用'-E'而不是'-r'。 GNU sed支持並據我所知,其他一些sed版本現在支持'-E' .. – Sundeep

0
votes
answers
49 views
+10

Microsoft Visual Studio:Windows和Unix項目源代碼兼容性

2

我將爲Windows和Unix操作系統體系結構開發一個命令行工具。但是我正在面臨一場鬥爭。我怎樣才能使代碼在Windows和Unix之間有效地轉換?Microsoft Visual Studio:Windows和Unix項目源代碼兼容性

項目將主要使用MS Visual Studio C++語言編寫。不過,我希望我的工具是跨平臺的,所以我可以在Windows和Unix系統中使用它。由於Unix不支持Visual Studio,因此我需要在某種程度上設計代碼結構以支持兩種體系結構(都是32位),並且OS專用標頭需要包含在代碼所在的唯一一個操作系統體系結構中。

所以我在尋求你的幫助。爲Windows和Unix維護幾乎相同的代碼的最有效方法是什麼?對於該特定操作系統的所有必需頭文件?所以我可以在Windows中創建program.exe文件,在Unix中創建program.run文件?測試當前操作系統體系結構(Windows或Unix)的一些條件,幷包括與操作系統相關的頭文件?

怎樣編碼?由於Windows命令行使用MS-DOS編碼(在中歐,它是DOS代碼頁852),Unix終端使用UTF-8編碼。我的工具將是多語言的(與貢獻者,從我的身邊開始英語和捷克語)。

我需要保持代碼結構儘可能小,當然也容易維護。源代碼應該可用於來自GitHub存儲庫的克隆/分支。

如果這不是適合堆棧溢出的問題,那麼只需告訴我,我會刪除它。只是尋求幫助,沒有別的。

+0

開始使用'CMake'來生成你的項目。如果可能,請勿直接使用任何操作系統功能。使用標準的C++。如果你需要一些操作系統功能,看看增強提供你想要的。使用git代碼。不要將任何二進制文件或甚至生成的文件(如項目文件)放入僅存儲庫的源代碼中。 – drescherjm

+0

是的,使用'cmake'。它現在支持VS 2017,並且可以幫助標題差異,而不必製作特定於操作系統的東西。如果這是不可避免的,請將該代碼放入操作系統抽象層。 – zzxyz

+0

我有VS 2015社區版。它支持CMake嗎? – Polda18

沙发
0
3

步驟1)設置您的持續集成系統,從第一天起每次都在Windows和Unix上構建代碼。最好在每個平臺上有多個編譯器。

步驟2)使用跨平臺構建系統,如sconscmake

步驟3)不要在程序中使用任何平臺相關的代碼在所有 - 當你來,實現在各種ifdef警衛多個版本。優先使用跨平臺庫。

步驟4)請確保您有足夠的單元測試(特別是對位,你必須使用特定於平臺的代碼來實現的東西多次),並確保您的CI系統運行所有測試爲每次提交。

步驟5)確保從第一天開始所有文本都是UTF-8編碼 - 轉換爲其他編碼可以發生在顯示層,但在內部保留UTF-8的所有內容。

步驟6)在所有支持的平臺上進行大量的手動測試。

並確保調整每個編譯器的警告設置waaay併發出警告錯誤(並修復所有這些錯誤)。在一個平臺上使用一個編譯器的警告通常會在另一個平臺上以不同編譯器的方式靜默編譯。

+0

好的,謝謝你的提示。在我的Windows機器上安裝CMake 3.10.1,並將其安裝到我的Linux虛擬機中... – Polda18

+0

@ Polda18 - Linux VM?如果可以的話,我會在Windows 10中查看WSL功能。與虛擬機相比,它非常便於開發。虛擬機是好的,當然會起作用。 – zzxyz

+0

@zzxyz - 你的意思是Ubuntu Shell功能?開機後,我的安裝被破壞並立即關閉。甚至不想要卸載修復... – Polda18

板凳
0
0

首先,Windows控制檯可以使用utf-16,但不能使用utf-8。其次,如果你堅持使用標準的C++庫,可能使用boost進行擴展(必須安裝在windows和任何你將建立的* nix系統上),只要你在說話,你真的不應該有任何問題關於嚴格接受執行工作和打印結果的命令行參數。

如果你談論的是終端控制(即,屏幕某處比下一個字符細胞等,特別是要落後於印刷)這將是更困難不少。

我會,不過,建議您使用cmake的基於項目時,Visual Studio通常使用自定義的MSBuild構建管理和是不會幫助,如果你嘗試的* nix系統建設。