如何在system()中退出shell模式

时间:2014-03-21 13:26:18

标签: php linux

我有一个PHP脚本应该使用一些预设的系统别名。即"别名ll = ls -l"

在终端" ll"但是可以从php系统(" ll")输出

sh: ll: command not found

如何退出" sh"并执行我的终端命令?

P.S。:可能是我误解了基本的linux组件shell和bash。在这种情况下,请更正我/帖子

1 个答案:

答案 0 :(得分:1)

PHP docs对此并不清楚,但可能PHP system反映了Standard C's system(3)将参数命令交给命令解释器sh(1) 。如果你想避免shell,除了system之外你还需要使用PHP的另一个特性(比如显式的fork / exec)。这是背景,但它无助于您解决问题。

在你的情况下,你似乎只想在rcfile中使用别名。由system调用调用的脚本不会读取你的rcfile,除非你采取非常的步骤来实现这一点,即使你这样做,对维护程序员来说也是不明显的。我强烈建议您将别名放在脚本或命令参数中,或者只是显式调用命令(ls -al)。

您也可以手动从脚本中获取rcfile,或者调用system(csh -i 'yourcommands')强制csh作为交互式shell调用(这会导致您的rcfile被读取)。我认为这是一个坏主意,因为它有效地迫使shell表现出与其环境不一致的行为,但为了完整性,我将其包括在内。

上面的大部分内容都是通过我的Mac(Mavericks)上csh手册的启动和关闭部分快速阅读的。还有其他潜在的解决方案,我还没有提出。