首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么makefile shell的结果与shell中的结果不一样?

在这个问题中,我们要讨论的是为什么在使用 Makefile 时,结果与直接在 Shell 中运行命令的结果不同。这可能是由于以下几个原因:

  1. 环境变量的差异:Makefile 和 Shell 可能使用了不同的环境变量。例如,PATH 环境变量可能在两者中设置的路径不同。这可能导致 Makefile 找不到某个命令或工具,从而导致结果不同。
  2. 当前工作目录的差异:Makefile 和 Shell 可能在不同的工作目录中运行。这可能导致 Makefile 无法找到某些文件或资源,从而导致结果不同。
  3. 依赖关系的问题:Makefile 通常用于管理依赖关系,确保在需要时重新编译或重新构建目标。如果依赖关系没有正确设置,可能导致 Makefile 中的某些命令没有运行,从而导致结果不同。
  4. 命令的执行顺序:Makefile 通常会按照一定的顺序执行命令。如果命令的执行顺序不正确,可能导致结果不同。

为了解决这个问题,可以尝试以下方法:

  1. 检查 Makefile 中的环境变量设置,确保它们与 Shell 中的设置相同。
  2. 检查 Makefile 中的当前工作目录设置,确保它与 Shell 中的设置相同。
  3. 检查 Makefile 中的依赖关系设置,确保它们正确地指定了目标和依赖项。
  4. 检查 Makefile 中的命令执行顺序,确保它们按照正确的顺序执行。

如果问题仍然存在,可以尝试在 Makefile 中添加一些调试信息,例如使用 echo 命令输出当前的环境变量、工作目录等信息,以帮助诊断问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MakefileShell脚本简介

给很多刚接触Makefile的人: 1、Makefile可以嵌入shell脚本,而且能像shell脚本中一样,各种命令、控制结构都可使用。 2、Makefile主要结构是 ......只有在command位置shell脚本才是有效,也就是只有在“生成目标的规则处”写shell脚本才是shell脚本,其它位置shell都是无效。...3、Makefileshell,不同行在不同进程执行,不同行直接不能传递变量,所以很多时候shell都尽量使用反斜杠()来把相关内容串成一行。...4、Makefile变量和shell变量是两个不同东西,并且为了避免Makefile变量和shell变量冲突,引用Makefile变量最好使用$(Makefile_Var),引用shell变量时最好使用...但如果在纯粹shell编程,纯shell脚本里可以使用$VAR来引用VAR这个变量。 收藏于 2012-08-08

2.1K80
  • shell幽灵:web Shell攻击调查

    攻击者在其他系统上安装了额外web shell,并在outlookweb Access(OWA)服务器上安装了DLL后门。...在对这些类型攻击调查,发现文件web shell试图使用web服务器合法文件名称隐藏或混合,例如: index.aspx fonts.aspx css.aspx global.aspx default.php...Web shell已经影响到了很多行业,公共部门组织是最常见目标部门之一。除了利用web应用程序或web服务器漏洞外,攻击者还利用服务器其他弱点。...了解面向internet服务器是检测和解决web威胁关键。可以通过监视web应用程序目录文件写入来检测web shell安装。...通过采取以下预防措施可以增强系统抵御webshell攻击能力: 1、识别并修复web应用程序和web服务器漏洞或错误配置,并及时进行更新。

    1.2K20

    shell脚本】$ 在shell脚本使用

    shell脚本 '$' 与不同符号搭配其表示意义也会不同 特殊标志符 含义 $0 当前脚本文件名 $n 传递给脚本或函数参数。n 是一个数字,表示第几个参数。...例如,第一个参数是$1,第二个参数是$2 $# 传递给脚本或函数参数个数 $* 传递给脚本或函数所有参数 $@ 传递给脚本或函数所有参数 $?...上个命令退出状态 $$ 当前Shell进程ID $() 与 `(反引号) 一样用来命令替换使用 ${} 引用变量划分出边界 注释:$* 和 $@ 都表示传递给函数或脚本所有参数,不被双引号(" "...)包含时,都以"$1" "$2" … "$n" 形式输出所有参数。...但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 形式输出所有参数

    6.2K20

    Shell变量

    系统变量 常用系统变量 $HOME、$PWD、$SHELL、$USER等 2.案例实操 (1)查看系统变量值 $ echo $HOME (2)显示当前Shell中所有变量:set $ set BASH...(2)等号两侧不能有空格 ​(3)在bash,变量默认类型都是字符串类型,无法直接进行数值运算。 ​(4)变量值如果有空格,需要使用双引号或单引号括起来。...unset readonly B=2 echo $B 2 B=9 -bash: B: readonly variable ​(5)在bash,变量默认类型都是字符串类型,无法直接进行数值运算 C=1...$D I love b ​(7)可把变量提升为全局环境变量,可供其他Shell程序使用,规则:export 变量名 vim helloworld.sh 在helloworld.sh文件增加echo...(功能描述:最后一次执行命令返回状态。如果这个变量值为0,证明上一个命令正确执行;如果这个变量值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

    1.6K20

    Shell管道

    Shell,管道将一个程序标准输出作为另一个程序标准输入,就像用一根管子将一个程序输出连接到另一个程序输入一样。...管道符号是|,下面的程序将cat标准输出作为less标准输入,以实现翻页功能: $ cat source.list.bk | less tee 有时候我们想要同时将程序输出显示在屏幕上(或进入管道...)和保存到文件,这个时候可以使用tee。...tee程序输出和它输入一样,但是会将输入内容额外保存到文件: $ cat hello.txt | tee hello.txt.bk 上面的例子,tee程序将cat程序输出显示在屏幕上,并且在...需要注意是,如果tee命令中指定文件已经存在,那么它将会被覆盖,使用-a选项在文件末尾追加内容(而不是覆盖): $ cat hello.txt | tee -a hello.txt.bk 条件执行

    89720

    Shell-alias在Shell脚本使用

    概述 在shell开启alias 实际操作 概述 众所周知,shell脚本使用是非交互式方式,在非交互式模式下alias扩展功能默认是关闭,此时虽然可以定义alias别名,但是shell不会将alias...别名扩展成对应命令,而是将alias别名本身当作命令执行,如果shell内置命令和PATH均没有与alias别名同名命令,则shell会找不到指定命令。...---- 在shell开启alias 使用shell内置命令shopt命令来开启alias扩展选项。...shopt是shell内置命令,可以控制shell功能选项开启和关闭,从而控制shell行为 常用命令: Command Desc shopt -s opt_name Enable (set) opt_name...项目启动中会依赖一些环境变量,所以双机启动脚本需要显式引入.bash_profile文件。 所以我们将 开启alias命令放在 .bash_profile

    2.3K10

    不一样 反弹Shell 系统剖析

    可能和大家理解不太一样,这是渗透测试对反弹shell递进需求造成。 按照通信协议可以分为 5大类,基本上涵盖了常见协议,这也是反弹shell走向成熟一个标志。...(1) 网络是长连接,命令执行是短shell模式 client端从server接收到待执行命令,启动bash执行这个命令,并将命令结果返回给server。比较典型是awk和tclsh。...(3) 网络是短连接,命令执行是短shell模式 结构是上面两个拼接,这种反弹shell,采用http/s协议,通过心跳包方式,传递命令和结果,因为http/s是短链接,命令执行时间较短,相对来说不容易检测...之前我还写过基于icmp反弹shell,感兴趣童鞋,可以看一下我之前写文章: 《Python3实现ICMP远控后门》 在公众号回复 15 可以获得源码。...以nc为例,在控制端运行 nc-lvp8080,在被控端运行 nc-e/bin/sh127.0.0.18080,在控制端运行 history 是没有任何反应。 ? 为什么说这种类型比较好检测呢?

    3K40

    shell export命令

    在子shell定义变量只在该子shell内有效。...结论: 1、执行脚本时是在一个子shell环境运行,脚本执行完后该子shell自动退出; 2、一个shell系统环境变量会被复制到子shell(用export定义变量); 3、一个shell系统环境变量只对该...shell或者它shell有效,该shell结束时变量消失 (并不能返回到父shell)。...3、不用export定义变量只对该shell有效,对子shell也是无效为什么一个脚本直接执行和用source执行不一行呢?...直接执行一个脚本文件是在一个子shell运行,而source则是在当前shell环境运行。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    1.2K20

    pythonshell操作

    pythonshell操作 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它返回值。...因为shell常用那些命令在python通常有对应而且同样简洁写法。...’, ‘net’, ‘lost+found’, ’sys’, ‘media’, ‘dev’, ‘proc’, ‘boot’, ‘home’, ‘bin’] 就像这样,接下去所有命令都可以在python解释器里直接运行观看结果...比如: os.environ[”fish”]=”nothing” 不过也要注意,环境变量值只能是字符串。和shell有些不同是,python没有export环境变量这个概念。为什么没有呢?...前两天叫我写脚本同事有个几万个文件目录,他想复制这些文件到其它目录,又不能 直接复制目录本身。他试了一下”cp src/* dest/”结果报了一个命令行太长错误,让我帮他写一个脚本。

    85740

    Shell重定向

    标准输入、标准输出和标准错误 一个程序输入可以来自于键盘,也可以来自于文件或者其他设备;同样,一个程序也可以将输出显示在屏幕或者保存到文件。这就涉及到标准输入、标准输出和标准错误。...程序输入是标准输入,默认是键盘,用户可以将其指定为文件或其他设备。 程序输出有两种,即标准输出和标准错误,其中标准输出是程序正常输出、标准错误是程序错误输出。...下面的程序从键盘读取输入,将结果显示在屏幕上,即标准输入、标准输出和标准错误都采用默认设置: $ ls ~ hello.txt homework name source.list.bk 重定向...wang $ sort < input li qian sun wang wu zhao zheng zhou 本例input文件作为sort命令标准输入。...input > output 2> error 下面的命令将标准输出重定向为output文件,使用2>&1将标准错误重定向为标准输出: $ sort output 2>&1 上面的例子

    77130

    20.1620.17 shell函数

    shell函数 把一段代码整理到了一个小单元,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元名字即可。...函数就是一个子shell,就是一个代码段,定义完函数就可以引用它 格式: function 后是函数名字,并且 function 这个单词是可以省略掉 花括号{} 里面为具体命令...1 4 2 function.sh [root@hf-01 shell]# ---- 示例2 用于定义加法函数,shell定义函数,必须放在上面 在shell里面需要优先定义函数,比如在调用这个函数时候...$ sh -x fun2.sh + sum 1 2 + s=3 + echo 3 3 [root@hf-01 shell]# ---- 示例3 显示IP,输入网卡名字,然后显示网卡IP #...,判定输入网卡是否有IP #!

    21720

    RedisShell工具

    我们在启动Redis服务时会用到redis-server Shell工具,在使用Redis客户端时候会用到redis-cli Shell工具。...实际上在Redis除了提供了上述介绍两个Shell工具外,还提供了redis-benchmark等Shell工具。在这一篇我们将详细介绍一下Redis中有关Shell工具内容。...-x: 该参数代表从标准输入读取数据并作为redis-cli最后一个参数。...--raw/--no-raw: --no-raw参数作用是返回结果必须是原始格式,而--raw参数作用则是返回结果必须是格式化后。 ---- redis-server ?...-t: 该参数可以对指定命令进行测试。 --csv: 该参数会将结果按照csv格式输出。 ---- 上述内容就是本篇要介绍RedisShell工具所有内容,如有不正确地方,欢迎留言。

    88840

    shell$(( ))、$( )与${ }区别

    命令替换 在bash,$( )与` `(反引号)都是用来作命令替换。 命令替换与变量替换差不多,都是用来重组命令行,先完成引号里命令行,然后将其结果替换出来,再重组成新命令行。..."+%Y-%m-%d"))` Linux Shell today is 2017-11-07 ``和$()混合使用 [root@localhost ~]# echo Linux $(echo Shell...先赋值一个变量为一个路径,如下: file=/dir1/dir2/dir3/my.file.txt 命令 解释 结果 ${file#*/} 拿掉第一条 / 及其左边字符串 dir1...则是将第四个组数重新定义为 xyz $(( ))与整数运算 bash整数运算符号 符号 功能 + - * / 分别为加、减、乘、除 % 余数运算 & | ^ !...分别为“AND、OR、XOR、NOT”  在 $(( )) 变量名称,可于其前面加 $ 符号来替换,也可以不用。

    1.2K30
    领券