通过外壳脚本找不到命令,但可在终端上使用


18

在我的.sh文件中,我无法调用ant或mv或cp命令,但在终端上执行相同的命令。以下是我的脚本

sample.sh文件

#! /bin/sh
cp filename.so filename_org.so
android update project -p .
ant clean
ant release

.bashrc文件中添加的路径。

export PATH=$PATH:/usr/bin/

cp,mv,ant仅在终端下无法通过scirpt运行。


1
给我们更多有关您的问题的信息..
Ruban Savvy

android/ ant,这些二进制文件在/ usr / bin中吗?
2014年

Answers:


13

由于您的脚本是shell脚本(/bin/sh),因此不会读取()交互式shell中的PATH条目。.bashrcbash/bin/bash

要使您的PATH条目可用于/bin/sh特定用户运行的脚本,请将PATH条目添加到该.profile用户的主目录中的文件中。


另外,您可以在脚本中为每个命令添加完整路径:

/bin/cp filename.so filename_org.so

或在脚本开始时设置PATH变量,包括所有必需的变量$PATHS

PATH=$PATH:/bin:/usr/bin:xxx
export PATH

2
正确的分析,但您没有提及正确的解决方案,即PATH在正确的位置进行设置.bashrc。将脚本更改为bash脚本不会有任何区别:.bashrc仅由交互式shell加载。
吉尔(Gilles)'所以

2

运行二进制文件(在bashrc中设置了路径)时遇到了相同的问题。

通过执行以下操作解决了该问题:

添加二进制文件或在/ usr / bin中添加指向二进制文件的链接。

ln -s [path_to_binary] [name_of_executable] 

然后使用

ls -l

您可以删除输入表单bashrc。


0

如果您的脚本很小,就可以做一件简单的事情,并尽快完成工作

在命令行上使用以下命令

which your_command 

上面的命令将打印输出,包括直接使用该命令的路径

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.