2012-03-26 59 views
-2

我想讓我們perl -pi -e編輯xml文件中的一行。如果我從命令行運行perl -pi -e命令,它工作正常,但是一旦我放入腳本並使用系統命令,我會得到下面列出的錯誤:Perl腳本中的XML編輯

su:無效選項 - 我

嘗試`su --help'以獲取更多信息。

print "Please enter virtualhost 1 - Example - ucisha.com:"; 
    my $virtualhost1 = <>; 
    system("ssh -t <HOST> \"sudo su - root -c perl -pi -e 's/xmlNamespaceAware=\"false\">/xmlNamespaceAware=\"false\"> <Alias>$virtualhost1<\/Alias>/g' /tcserver/springsource-tc-server-node/UCISjvm/conf/krh.xml\""); 
+6

你正在從perl到shell的脫殼進入遠程系統,你使用sudo來升級你的權限,並通過perl單行程序來編輯XML文件,使用正則表達式?天啊。在畏懼了半個小時之後,我認真考慮在服務器上安裝Perl腳本,將編輯需求作爲命令行參數,然後使用適當的XML解析器創建它們。 – Quentin 2012-03-26 18:21:59

回答

3

您需要在傳遞給-c的參數周圍添加引號。

此刻你有-c perl然後-pi被作爲su而不是perl的另一個參數。

+0

所以嘗試修復新的錯誤。作爲一個經驗法則,首先退出並構建程序中最嵌套的部分。然後再一次返回一層嵌套,確保在你離開時逃脫。 – Quentin 2012-03-26 18:36:34

+0

我有一些問題在這裏得到代碼。但現在我得到下面的錯誤: 打印「請輸入虛擬主機1 - 示例 - ucisha.com:」; my $ virtualhost1 = <>; $ virtualhost1 <\/Alias>/g'ssh -t \「sudo su - root -c'perl -pi -e's/xmlNamespaceAware = \」false \「>/xmlNamespaceAware = \」false \ /tcserver/springsource-tc-server-node/UCISjvm/conf/krh.xml'\ 「」); ash:-c:第0行:意外標記附近的語法錯誤''' bash:-c:第0行:'sudo su - root -c'perl -pi -e's/xmlNamespaceAware = false>/xmlNamespaceAware = false> akdljad' – Badboy 2012-03-26 19:03:05

+0

您正在使用'''字符在未使用'''分隔的字符串中轉義。 – Quentin 2012-03-26 19:04:55