如果我想在屏幕上显示“aaa”:
(1)$: echo aaa | cat ... works OK
(2)$: echo aaa | ( cat ) ... works OK
(3)$: echo aaa | ( cat & ) ... NOT working
(4)$: ( echo aaa & ) | cat ... works OK
(5)$: echo aaa | ( cat <&0 & ) ... works ok in BASH (but not in SH)
(6)$: echo aaa | ( cat <&3 & ) 3<&0 ... works ok in BASH and SH
Run Code Online (Sandbox Code Playgroud)
来自 (3) 和 (4) …
我有简单的 test.php 页面:
<pre><?php system("ls -la /tmp"); ?></pre>
Run Code Online (Sandbox Code Playgroud)
它总是只显示:.
和..
文件夹,浏览器中没有其他内容。
在命令行中:
1) ls -la /tmp
2) sudo -u http ls -la /tmp
3) php test.php
4) sudo -u http php test.php
Run Code Online (Sandbox Code Playgroud)
所有这些命令都返回目录文件/子目录的完整列表。
这是什么原因???
问题与“/tmp”文件夹相关,因为ls -lah /usr
工作正常。
我在 4 个 comps 上对此进行了测试(其中一个是带有 php 5.0.6 的 debian,并且 php 像我预期的那样显示所有文件,其他 3 个 comps 有 php7 并显示空的 /tmp)。
更新:
即使在将 http 添加到 sudoers 文件并运行 'sudo ls /tmp' 之后,问题在 php 版本 >7 上也是一样的。
但是乳宁“系统( “回声AAA> /tmp/aaa.txt; LS -la / TMP”)所示 …
我想用'command &'最后或'nohup command &'来分离命令,但它在分离后立即停止。
命令很少具体,如果它在输入时收到 eof,它会中断,因此 /dev/null 作为输入将导致结束和通常有效的解决方案:
$ command < /dev/null > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
不工作...
unix/linux 中是否有其他设备可以替换 /dev/null 并表现得像空输入,但不发送 eof。
(顺便说一句,命令是非常有用的多播工具emcast,我可以尝试自己修补它,或者为此目的找到修补版本......但似乎问题可以在外面解决)
我正在添加此 EDIT 以使我的问题更清楚。我制作了 2 行完美运行的 C 程序:程序名称是“donothing”
#include <unistd.h>
int main() { while (1) { sleep(10); } return 0; }
Run Code Online (Sandbox Code Playgroud)
这就是我正在寻找的,一些设备/程序,什么都不做,但保持其标准输出打开。两者(“command & ... disown”和“nohup command &”)都有效。
$ donothing | mycommand >/dev/null &
$ disown %1
Run Code Online (Sandbox Code Playgroud)
效果很好,所以现在的问题只是:什么 unix 设备/程序表现得像我的“无所事事”。