2017-03-17 31 views
1

我要運行該腳本的bash通PHP變量

#!/bin/bash 
# file name: myscript.sh 
PROJECT_DIR=$1 
mkdir $PROJECT_DIR 
mkdir $PROJECT_DIR/PolySkills 
mkdir $PROJECT_DIR/PolySkills/cr 
mkdir $PROJECT_DIR/PolySkills/cr/corrections 
mkdir $PROJECT_DIR/PolySkills/cr/corrections/jpg 
mkdir $PROJECT_DIR/PolySkills/cr/corrections/pdf 
mkdir $PROJECT_DIR/PolySkills/cr/diagnostic 
mkdir $PROJECT_DIR/PolySkills/cr/zooms 
mkdir $PROJECT_DIR/PolySkills/data 
mkdir $PROJECT_DIR/PolySkills/exports 
mkdir $PROJECT_DIR/PolySkills/scans 
mkdir $PROJECT_DIR/PolySkills/copies 
cd $PROJECT_DIR/PolySkills 
cp ~/file.tex $PROJECT_DIR/PolySkills 

對於變量「PROJECT_DIR」表示的路徑中,我將創建一個文件夾,我想從一個php檢索其值變量。 我看了一些在互聯網上的例子,我嘗試了一個,但它不起作用。這是我使用:

chdir('~/'); 
    $pathtofile = "~/ExportEval/".$NomUE."/".$NomOcc."/".$Numtudiant; 
    $directory=$pathtofile."/AMC_Project"; 
    $output = exec("./myscript $directory"); 

知道腳本文件「的MyScript」存在於家「〜/」

感謝您的幫助:)

更新我的問題: 我發現了什麼問題,但我沒有看到作爲變量$ NomUE的解決方案是由一個由空格分隔的句子組成的,它認爲如果我將$ 1更改$ 2,$ 1只是這個句子的第一個,同一句話的第二個字!我不明白爲什麼它不需要$ pathtofile作爲路徑!

+2

是否有一個原因,你不想用PHP只做它? –

+0

是的,我會然後運行AMC命令(一種可以自動修復qcm的工具),所以我需要一個bash腳本來做到這一點 –

+0

我發現有什麼問題,但我沒有看到作爲變量$ NomUE的解決方案是由一個由空格分隔的句子,它認爲如果我將$ 1改爲$ 2,$ 1只是這個句子的第一個,它就是這個句子的第二個單詞!我不明白爲什麼它不需要$ pathtofile作爲路徑! –

回答

0

在將它們發送到命令行之前,您需要始終使用escape variables。此外,~在這裏沒有意義,也沒有理由使用chdir()。只需使用完全合格的路徑名即可:

<?php 
$pathtofile = "/home/someuser/ExportEval/$NomUE/$NomOcc/$Numtudiant"; 
$directory = escapeshellarg("$pathtofile/AMC_Project"); 
$output = exec("/home/someuser/myscript $directory"); 

您可能在主目錄中運行腳本並從該目錄讀取時遇到問題。最好是將腳本放在適當的位置,如/usr/local/bin/

+0

thnak你:我用$ NomUEFile = preg_replace('/ \ s + /','',$ NomUE); $ NomOccFile = preg_replace('/ \ s + /','',$ NomOcc); $ NumtudiantFile = preg_replace('/ \ s + /','',$ Numtudiant);刪除變量中的空格 –

+0

您不需要那樣做。只需使用'escapeshellarg'。由於空格在文件路徑中,因此通過刪除字符使路徑無效。 – miken32