【问题标题】:pass php variables in a bash script在 bash 脚本中传递 php 变量
【发布时间】:2017-03-17 16:14:08
【问题描述】:

我想运行这个脚本 bash

#!/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”存在于home“~/”中

谢谢你的帮助:)

我更新了我的问题: 我发现了问题所在,但我看不到解决方案是什么,因为变量 $NomUE 由一个用空格分隔的句子组成同一句话的第二个字!我不明白为什么它不以 $pathtofile 作为路径!

【问题讨论】:

  • 你有什么理由不想只用 php 来做吗?
  • 是的,然后我将运行 AMC 命令(一个可以自动修复 qcm 的工具),所以我需要一个 bash 脚本来执行此操作
  • 我发现了问题所在,但我看不出解决方案是什么,因为变量 $NomUE 由一个用空格分隔的句子组成,它认为如果我改变 $1 只是这句话的第一个$ 1 by $ 2 它需要同一句话的第二个单词!我不明白为什么它不以 $pathtofile 作为路径!

标签: php bash shell


【解决方案1】:

在将它们发送到命令行之前,您需要始终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/

【讨论】:

  • 谢谢你:我用 $NomUEFile = preg_replace('/\s+/','',$NomUE ); $NomOccFile = preg_replace('/\s+/','',$NomOcc ); $NumtudiantFile = preg_replace('/\s+/','',$Numtudiant );删除变量中的空格
  • 你不需要这样做。只需使用escapeshellarg。由于空格位于文件路径中,因此您通过删除字符使路径无效。
猜你喜欢
  • 1970-01-01
  • 2011-12-25
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
相关资源
最近更新 更多