相关疑难解决方法(0)

如何从Bash脚本检查程序是否存在?

如何验证程序是否存在,以返回错误并退出或继续脚本的方式?

看起来应该很容易,但它一直在困扰我.

bash

2032
推荐指数
20
解决办法
62万
查看次数

sed one-liner将全部大写转换为小写?

我有一个文本文件,其中一些单词打印在所有大写.我希望能够将文本文件中的所有内容转换为小写,使用sed.这意味着第一句话将会读到,'我有一个文本文件,其中一些单词都打印在所有大写字母中.'

regex sed

115
推荐指数
6
解决办法
15万
查看次数

ifeq:在意外令牌附近出现语法错误

我正在编写一个在一个地方进行字符串匹配的Makefile,代码如下:

if test ...; \
    then \
    shell scripts... \
fi

ifeq ($(DIST_TYPE),nightly)
    shell scripts ...
endif
Run Code Online (Sandbox Code Playgroud)

这里第一个if是shell脚本,第二个ifeq是GNU Make的条件.但是会生成以下错误:

ifeq(每晚,每晚)

/ bin/sh:-c:第0行:意外令牌附近的语法错误`每晚,每晚'

/ bin/sh:-c:第0行:`ifeq(每晚,每晚)'

这里发生了什么事?似乎Make正试图调用shell.

谢谢.

makefile

61
推荐指数
2
解决办法
2万
查看次数

Makefile作为shebang的可执行脚本?

是否可以创建一个可由make解释的可执行脚本?

我试过这个:

#!/usr/bin/env make --makefile=/dev/stdin

main:
        @echo Hello!
Run Code Online (Sandbox Code Playgroud)

但它不起作用 - 挂起直到按下Ctrl-c.

makefile shebang

20
推荐指数
2
解决办法
4066
查看次数

语法错误:单词意外(期待")")?

PLATFORM = x86
CUD = cuda
X86 = x86
PAN = panda
ARM = arm

app: 
    ifeq($(PLATFORM),$(CUD))
CC = dum3
endif
ifeq($(PLATFORM), $(X86))
CC = gcc
endif
ifeq($(PLATFORM),$(PAN))
CC = dum1
endif
ifeq($(PLATFORM),$(ARM))
CC = dum2
endif


$(CC) -o ./Executable/list  ./Source/ll_main.c ./Library/liblst.a
./Executable/list
Run Code Online (Sandbox Code Playgroud)

当我这样做它显示错误....语法错误:字意外(期待")")?

Plzz ..帮助..

makefile

12
推荐指数
1
解决办法
2万
查看次数

如何从Makefile中使用shell内置函数?

我只是偶然发现了这个问题.我试着写一个非常基本的Makefile目标:

core: myprogram
        ulimit -c 10000
        ./myprogram
        ulimit -c 0
Run Code Online (Sandbox Code Playgroud)

我们的想法是将核心大小限制设置为适当的值,使程序崩溃,然后将核心大小限制重置为零.当我调用此规则时,我收到以下错误消息:

$ make core
cc -Wall -Wextra -m32 -g  -o example example.c 
ulimit -c 100000
make: ulimit: Command not found
make: *** [core] Error 127
Run Code Online (Sandbox Code Playgroud)

首先,我有点惊讶,但我认为这个问题来自于ulimit内置shell 的事实.而且,令人惊讶的是(至少对我而言),这些内置函数无法从a调用Makefile.

此外,ulimit既可以是仅一个内置函数(它是这种情况在我的Debian)或仅一个二进制程序(/usr/bin/ulimit).

所以,我的问题很简单,如何以优雅和可移植的方式解决这个问题,并从Makefile内部调用内置函数?

shell makefile

7
推荐指数
1
解决办法
3705
查看次数

在 Makefile 中,如何验证是否安装了所需的 Linux 软件包

下面的代码在 ptxdist Makefile 中工作,但想知道是否有更好的解决方案来检查在继续构建之前是否安装了所有必需的软件包?

ENV_VERIFICATION:
    @echo ------------START ENV VERIFICATION---------------
    if ! dpkg -s sudo | grep Status | grep -q installed; then \
      echo ERROR: sudo package not installed!; \
      exit 1; \
    fi
    if ! dpkg -s scons | grep Status | grep -q installed; then \
      echo scons package not installed!; \
      exit 1; \
    fi
    @echo ------------END ENV VERIFICATION---------------
Run Code Online (Sandbox Code Playgroud)

我可以在我的系统中运行以下命令,最好在 make 日志中打印相同的命令,任何有助于改进上述代码并在日志中打印以下输出(如果安装了包)的帮助都是值得赞赏的。提前致谢!

$ dpkg-query -W -f='${Package} ${Status}\n' sudo
sudo install ok installed
Run Code Online (Sandbox Code Playgroud)

linux gnu-make

5
推荐指数
2
解决办法
6365
查看次数

从GNU Makefile调用`command -v find`

我使用shell(bash,但我需要可移植性)和GNU Makefile.我有这个代码:

check_commands:
        command -v find >/dev/null
        command -v asdf >/dev/null
Run Code Online (Sandbox Code Playgroud)

假设,第一个命令被传递,第二个命令中止Makefile并出错.现在,我删除了>/dev/null.那为什么呢

check_commands:
        command -v find
Run Code Online (Sandbox Code Playgroud)

产生以下错误?

make: command: Command not found.
Run Code Online (Sandbox Code Playgroud)

shell makefile gnu-make

2
推荐指数
1
解决办法
406
查看次数

检查 Makefile 中的程序是否存在,否则运行命令

我想创建一个 Makefile 来识别系统中是否存在给定的程序,如果不存在则运行另一个目标(或命令)。请阅读我在问题末尾的脚本(PS),然后将其标记为重复。

总之,我想做如下伪代码:

if (myProgram.exists()):
    myProgram arg0 arg1 arg2
else:
    otherProgram arg0 arg1 arg2 #suppose that otherProgram will always exists
Run Code Online (Sandbox Code Playgroud)

我已经按照this SO question的最佳答案尝试了一些解决方案,这告诉我做这样的事情:

check: ; @which myProgram > /dev/null
mytarget: check
    myProgram arg0 arg1 arg2
Run Code Online (Sandbox Code Playgroud)

该解决方案实际上有效,但这会中止程序而不是执行另一个 makefile target / command。我尝试了很多不同的实现,但没有一个解决了我的问题。

如何在 Makefile 中实现类似的功能?

PS:这个问题不是“检查Makefile中的程序是否存在”的重复问题,因为后者旨在如果程序不存在则停止执行,而前者旨在如果程序不存在则运行另一个目标存在。

makefile

2
推荐指数
2
解决办法
4542
查看次数

标签 统计

makefile ×6

gnu-make ×2

shell ×2

bash ×1

linux ×1

regex ×1

sed ×1

shebang ×1