在页面PHP上输出带有换行符的远程服务器流bash文件

时间:2017-08-15 20:34:28

标签: php bash ssh

我正在尝试将远程bash文件输出到页面上,以便用户可以看到发生了什么。我能够读取bash文件,但是,我尝试的任何内容都不是在每个echo语句之间添加换行符。有谁知道怎么做?

这是我的bash文件:

scirpt.sh

#!/bin/bash

echo 'touch /tmp/testfile'."\n"
echo "I am up\n"
echo '\n'
echo "\n"
echo
echo 'hello there'

这是我的php逻辑:

main.php

if(isset($_POST['option']) && $_POST['option'] == 1) { 
                $stream = ssh2_exec($connection, "/tmp/user/testscripts/up.sh");
                stream_set_blocking($stream, true);
                $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
                $output = stream_get_contents($stream_out);

           }
....
....
....

<div class="box1">
  <form method="post">
    <label class="col">Up/Down</label>
    <span class="col">
      <input type="radio" name="option" id="r1" value="1" />
      <label for="r1">Up</label>
      <input type="radio" name="option" id="r2" value="2" />
      <label for="r2">Down</label> 
    </span>
    <span class="col">
      <input type="submit" class="button"/>
    </span>
  </form>

  <?php
    echo "<pre>$output</pre>"
  ?>

这是我在页面上的输出:

触摸/tmp/testfile..n我在那里\ n \ n \ n你好

2 个答案:

答案 0 :(得分:1)

当您回复某些内容时,您将获得 版本。 C风格\n不是一个选项。

两个选项。第一个是:

echo 'touch /tmp/testfile'
echo 'I am up'
echo
echo
echo
echo 'hello there'

部分选项是提供给cat的HEREDOC:

cat <<END
touch /tmp/testfile
I am up


hello there
END

答案 1 :(得分:1)

bash label_lines会附加换行符,除非使用echo进行抑制,因此不要包含它们。有一个-n选项让-e解释转义后的字符,但您不需要这样做。

此外,要在网页(HTML)上显示,您需要包含echo标记或使用PHP <pre></pre>

所以使用:

nl2br()

或者:

echo 'touch /tmp/testfile'
echo 'I am up'
echo
echo
echo
echo 'hello there'

HTML不会呈现换行符,因此将其视为预先格式化的文本:

echo 'touch /tmp/testfile
I am up


hello there'

或将换行符转换为HTML echo '<pre>' . stream_get_contents($stream_out) . '</pre>'; 标记:

<br>