Shell_exec使用相同的输入提供不同的输出

时间:2018-03-17 18:05:31

标签: php linux bash

我正在尝试在Linux环境中返回文件夹的内容。 为此,我运行以下代码:

//this line returns folders and files from current folder
$reg = shell_exec ("ls -A");
//in this line I just try to show the info with the desired structure.
$reg = "stat --printf='%n|%s|%s|%F|%y|%a' ".$reg." | numfmt --to=iec-i --field=2 --delimiter='|' --suffix=B";
//This prints the content of $reg
echo $reg;
//I manually input the string returned by $reg and I receive the correct output
echo shell_exec ("stat --printf='%n|%s|%s|%F|%y|%a' .file1 file2 | numfmt --to=iec-i --field=2 --delimiter='|' --suffix=B");
//This just prints the result of "stat --printf='%n|%s|%s|%F|%y|%a' .file1"
echo shell_exec ($reg);

问题是最后两个“回声”指令返回给出(理论上)相同输入的不同输出。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

$reg= str_replace("\n", " ", shell_exec("ls -A")); 检测到它被管道传输到另一个命令时,它每行写一个文件,搞砸了你的命令。

你可以用空格替换它们

ls

或使用$reg = "stat --printf='%n|%s|%s|%F|%y|%a' $(ls -A) | numfmt --to=iec-i --field=2 --delimiter='|' --suffix=B"; 作为替代

#include <iostream>

using namespace std;
using ld = long double;

template<int i>
struct A {
    static_assert(false,"");
    constexpr static int value = 3;
};

template<int i>
struct B {
    constexpr static int value = i*i*i;
};

template<int i>
struct CheckVal {
    constexpr static int value = conditional<i == 1,A,B><3>::value;
};