我在那儿!
我在学习组合.sh文件和PHP时遇到了一些问题。我创建了一个文件test.sh,在该文件中我调用了一个名为test.php的PHP文件。
如果我双击.sh文件然后它运行完美但当我尝试从终端运行它时,我得到“命令未找到”。我在我的.sh文件中的确切文件夹,但它不会工作。这是我的test.sh:
#!/bin/bash
LIB=${0/%cli/}
exec php -q ${LIB}test.php one two three
exit;
当我双击test.sh文件时,它会像它支持的那样返回argv数组。但为什么我不能从终端运行它?
答案 0 :(得分:6)
使用./filename.sh
无论你是否在同一个文件夹中,没有给出./系统正在搜索路径变量。 (/ bin /,/ usr / bin等)
答案 1 :(得分:1)
是否启用了执行位?
chmod +x test.sh
答案 2 :(得分:0)
从终端启动以及通过双击启动时,您的环境可能会有所不同。尝试从终端执行which php
和echo $PATH
以查看交易是什么。
编辑1
正如其他人所说,如果你的“命令未找到”指的是shell脚本而不是php,那么你可能忘记在脚本名称之前加上“./”(即./test.sh
)。另外,不要忘记通过调用chmod a+x test.sh
使其可执行。原因是PATH不包含当前目录(即“。”),因为这样做会带来安全风险(例如,文件夹中包含大量文件,包括假的“ssh”,然后可能会拦截您的密码等等。)
编辑2
此外,我不了解您,但${0/%cli/}
正在我的终端内评估-bash
。你确定这是你希望它扩展到什么?也许您应该指定确切的文件名。
答案 3 :(得分:0)
您的$ PATH变量可能不包含'。' - 所以shell可能无法找到要运行的命令。
正如其他人所说,sh ./file.sh会起作用......
答案 4 :(得分:0)
另一个选择是用sh运行它(或者bash,如果你的机器上的sh不是bash而脚本使用bashims)
sh filename.sh
bash filename.sh
无论文件是可执行文件还是$ PATH
,这都可以