在Bash脚本中运行用户安装的二进制文件

时间:2015-07-29 13:59:50

标签: linux bash path

与在终端中不同,我无法在不知道其路径的情况下从bash脚本运行二进制文件(我通过包管理器安装)。到目前为止,我一直在使用一种方法来确定哪种感觉相当笨拙。

var newPost = new Post.model({
    title: 'New Post'
});

newPost.save(function(err) {
    // post has been saved      
});

Post.model.find(function (err, posts) {
  if (err) return console.error(err);
  console.log(posts);    
})
keystone.start();

必须有比这更好的方式,对吧?我已经尝试了APP=( "/usr/bin/my_app" "/usr/local/bin/my_app" "/opt/local/bin/my_app" "/bin/my_app" ) for i in ${APP[*]}; do if [[ -e $i ]]; then eval $i $@ break else echo "$i not found" fi done ,但它报告"命令未找到"。

2 个答案:

答案 0 :(得分:2)

您基本上复制了shell的内置功能。请改用内置功能。<​​/ p>

PATH=/usr/bin:/usr/local/bin:/opt/local/bin:/bin:$PATH
# ... though /usr/local/bin should normally go before /usr/bin
hash -r my_app # just to be safe
my_app "$@"

此外,eval是多余的,$@需要用双引号。

答案 1 :(得分:0)

二进制文件需要在$PATH中,并且需要可执行。

确保ls -l /path/to/your/my_app确保可执行位已设置。

如果从菜单栏启动Sublime Text,则应用程序将需要位于系统路径中,而不仅仅是当前bash shell中的路径。您可能需要更新/etc/profile才能执行此操作。但是,开始测试路径理论最简单的方法是在已知始终位于路径中的目录中为应用程序创建符号链接。例如ln -s /crazy/path/to/your/my_app /usr/bin/。如果有效,那么你知道它是一个PATH问题。