2010-06-05 96 views
2

我需要通過命令行運行腳本,但運行腳本所需的文件需要我在腳本的目錄中。但是我無法爲每個需要運行的命令行做到這一點。他們超過五千人。有人可以告訴我如何輕鬆地格式化列表或添加一些可以使其運行的格式。我有這樣的東西....我需要通過命令行運行PHP腳本,但發生這種情況

php /path/to/the/script/01240/script.php 
php /path/to/the/script/03770/script.php 
php /path/to/the/script/02110/script.php 
php /path/to/the/script/02380/script.php 
php /path/to/the/script/03220/script.php 
php /path/to/the/script/02340/script.php 
php /path/to/the/script/03720/script.php 
php /path/to/the/script/03460/script.php 
php /path/to/the/script/0180/script.php 
php /path/to/the/script/02000/script.php 
php /path/to/the/script/01830/script.php 
php /path/to/the/script/0980/script.php 
php /path/to/the/script/0400/script.php 
php /path/to/the/script/02750/script.php 
php /path/to/the/script/0760/script.php 
php /path/to/the/script/02690/script.php 

.....並且它繼續5000多行。

+0

我只是進出目錄,但我無法編輯該列表。它太長了。 – user355367 2010-06-05 14:32:36

回答

0

您無需手動編輯您的列表。寫另一個腳本讀入您的主腳本,並在每個腳本之前/之後添加cd命令。然後運行結果。

+0

我不擅長代碼,你可以給我看一下smippets或者寫給我看。我知道它很簡單。 – user355367 2010-06-05 14:35:24

+0

等待。這太容易了。爲每個文件作爲行包括,對嗎? – user355367 2010-06-05 14:38:44

+0

@ user355367:類似的東西,是的。這不應該是困難的。 – skaffman 2010-06-05 15:21:12

0

您可以創建一個名爲php1.bat,內容如下新的文件:

pushd %~p1 
php %1 
popd 

這將改變參數的目錄,執行PHP和跳回來。

在此之後,用您最喜歡的搜索/替換所有編輯器來替換您的腳本中的php /的每個出現call php1 /,因此它不執行php,但php1.bat

1
find -type f -iname script.php -execdir php {} \; 

或者,如果腳本不同的名稱:

find -type f -iname '*.php' -execdir php {} \; 

編輯:如果它是特定的腳本列表而不是所有: 另一種方法是在定義一個的auto_prepend_file您php.ini(或者這個腳本的自定義php.ini),它可以讓你放在那裏:

<?php 
    chdir(dirname($argv[1])); 
?> 
0

我可以建議兩種可能的解決方案:

一種是向腳本中添加一個選項,以便您可以指定工作目錄。每個進程都有自己的工作目錄,所以這意味着你的PHP腳本會改變它的目錄,但是你運行腳本的shell不會。一旦PHP腳本完成,你就回到你的shell中,在你開始的目錄中。

php script.php -d /path/to/the/script/01240/ 

另一種解決方案是爲你調用你的PHP腳本來更改目錄:作爲

<?php 

$options = getopt("d:"); 
if (isset($options["d"])) { 
    chdir($options["d"]) or die("Cannot chdir to " . $options["d"]); 
} 

...do the rest of the script... 

然後調用你的腳本。記得我說每個進程都有自己的工作目錄。但是你可以簡單地使用圓括號來打開子進程。然後在該子shell中使用cd來更改目錄並調用PHP腳本。一旦你完成了parens中的子shell,你就回到了你開始的地方。

shell$ (cd /path/to/the/script/01240/ ; php ~/bin/script.php) 
shell$ (cd /path/to/the/script/03770/ ; php ~/bin/script.php) 
shell$ (cd /path/to/the/script/02110/ ; php ~/bin/script.php) 

但我猜你的腳本只是用相對路徑名打開文件。如果您在腳本中相對於被調用的腳本的位置dirname(__FILE__)從字面上做了一些代碼,那麼這些解決方案將不起作用。

相關問題