首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使查看与帐户的..bashrc配置路径不同的路径

使查看与帐户的..bashrc配置路径不同的路径
EN

Stack Overflow用户
提问于 2014-07-16 13:58:19
回答 1查看 83关注 0票数 2

我想从ShellCheck调用Makefile,这是一个用于分析shell脚本的Haskell程序。

当我通过ShellCheck安装cabal install时,它被安装为~/.cabal/bin/shellcheck。因此,我已经相应地配置了Bash:

代码语言:javascript
复制
$ cat ~/.bashrc
export PATH="$PATH:~/.cabal/bin"

$ source ~/.bashrc
$ shellcheck -V
ShellCheck - shell script analysis tool
version: 0.3.4
license: GNU Affero General Public License, version 3
website: http://www.shellcheck.net

这使我能够从Bash中的任何目录运行shellcheck。但是,当我试图从Makefile调用它时,make无法找到shellcheck

代码语言:javascript
复制
$ cat Makefile
shlint:
    -shlint lib/

shellcheck:
    -shellcheck lib/**

lint: shlint shellcheck

$ make shellcheck
shellcheck lib/**
/bin/sh: 1: shellcheck: not found
make: [shellcheck] Error 127 (ignored)

我认为那是没有收到相同的PATH与我的普通巴什壳。我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-16 14:14:22

尝试使用$HOME,而不是~

代码语言:javascript
复制
export PATH="$PATH:$HOME/.cabal/bin"

在所有shell中的路径名中都不支持~-means-home-目录特性。当make运行菜谱时,它不使用用户的shell (这将是一场灾难!)它总是使用/bin/sh

在某些系统(特别是基于Debian/Ubuntu的GNU/Linux发行版)上,默认的/bin/sh不是bash,而是dash。Dash不支持在~变量中展开PATH

通常,您应该保留~作为速记在命令行中使用。但是在脚本编写等方面,您应该总是更喜欢写出$HOME

预计到达时间:

另外,双星语法lib/**是像bashzsh这样的shell的非标准特性,在make食谱中不会做任何特别的事情。它与编写lib/*完全相同。

通过添加以下内容,可以强制make使用与/bin/sh不同的shell:

代码语言:javascript
复制
SHELL := /bin/bash

例如,对于makefile来说,这使得它的可移植性更低(如果这是一个问题)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24782765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档