AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-16569

Erel Segal-Halevi's questions

Martin Hope
Erel Segal-Halevi
Asked: 2020-03-04 10:16:30 +0800 CST

我的 Makefile 是空的,但 make 正在运行一些旧命令 [重复]

  • 0
这个问题在这里已经有了答案:
这个 Makefile 是如何在不指定编译器的情况下制作 C 程序的? (1 个回答)
2年前关闭。

我有一个奇怪的错误,我设法减少到以下错误。我有一个只有两个空文件的文件夹:一个 Makefile 和一个 cpp 文件:

$ ls -la
total 8
drwxrwxr-x  2 erelsgl erelsgl 4096 Mar  3 20:12 .
drwxrwxr-x 13 erelsgl erelsgl 4096 Mar  3 20:10 ..
-rw-rw-r--  1 erelsgl erelsgl    0 Mar  3 20:12 Demo.cpp
-rw-rw-r--  1 erelsgl erelsgl    0 Mar  3 20:09 Makefile
$ cat Makefile 
$ cat Demo.cpp 

当我运行时,make我得到了预期的结果:

$ make
make: *** No targets.  Stop.

但是当我跑步时,make Demo.o我得到了一个非常奇怪的结果:

$ make Demo.o
clang++-5.0 -std=c++17   -c -o Demo.o Demo.cpp
make: clang++-5.0: Command not found
<builtin>: recipe for target 'Demo.o' failed
make: *** [Demo.o] Error 127

命令“clang++-5.0 -std=c++17”实际上是几天前在 Makefile 中的,但我早就用 clang++-9 替换了它。现在,如您所见,Makefile 完全是空的。为什么make仍在运行这些旧命令?

编辑:当我将 Makefile 更改为包含这两行时,也会发生同样的事情:

%.o: %.cpp xxx.h
    clang++-9 --compile $< -o $@

当文件 xxx.h 不存在时。这非常令人困惑:我运行make Demo.o它是用 clang++-5.0 而不是 clang++-9 构建的!

make
  • 1 个回答
  • 197 Views
Martin Hope
Erel Segal-Halevi
Asked: 2019-04-01 08:01:19 +0800 CST

如何获取输出的最后一行或退出代码

  • 4

我正在用 bash 编写一个自动作业评分器。分级机编译一个程序并运行它。如果程序编译失败或运行失败(例如由于分段错误),等级应该是一个固定的小数字,例如5。否则,等级是程序输出的最后一行。

要获得最后一行,我可以这样做:

grade=$( ./a.out | tail -1 )

但这总是给出 0 的退出代码,即使 a.out 无法运行(例如未找到),所以我无法判断程序是否存在失败。

另一种选择是使用临时文件:

./a.out > temp
if [ $? -ne 0 ]
then
  grade=0
else
  grade=$( tail -1 temp )
fi

但是,如果有许多不同的进程同时执行相同的操作,这可能会出现问题。即使使用一个进程,当我只需要最后一行时,将所有输出保存在一个文件中(输出可能很大)也是一种浪费。

有没有不使用临时文件的解决方案?

bash scripting
  • 2 个回答
  • 4195 Views
Martin Hope
Erel Segal-Halevi
Asked: 2019-03-20 07:13:25 +0800 CST

这三个额外的字符是什么?为什么它们会导致如此奇怪的错误?[复制]

  • 3
这个问题在这里已经有了答案:
#!/bin/bash - 没有这样的文件或目录 8 个答案
3年前关闭。

看看这两个文件:

  • 文件 1
  • 文件 2

在我看来它们完全一样,但文件 1 有 41 个字节,文件 2 有 44 个字节。

现在,我不会关心 3 个额外的字符,但是,我认为这些字符也会导致一个奇怪的错误:当我克隆并运行这些文件时,文件 1 运行正常,而文件 2 在第 3 行返回错误:“./ BasicCheck.sh:第 3 行:cd:case0:没有这样的文件或目录”。

那么:这些额外的字符是什么?为什么它们会导致错误?我应该怎么做才能修复这些错误?

我的猜测是它们是换行符——也许文件 1 有基于 Linux 的换行符,而文件 2 有基于 Windows 的换行符。这是对的吗?为什么它会导致这样的错误?

bash error-handling
  • 1 个回答
  • 376 Views
Martin Hope
Erel Segal-Halevi
Asked: 2019-03-12 03:50:06 +0800 CST

如何使具有潜在无限循环的程序超时

  • 1

假设我运行一个我怀疑包含无限循环的程序,或者一些可能运行时间过长的其他代码。我知道在 Linux 中我可以做到:

timeout 1 ./program

给程序一个 1 秒的超时时间。但是,如果我理解正确,这只会向程序发送一个“SIGTERM”信号——程序可能会忽略它。无论如何,有什么更安全的方法可以确保程序在 1 秒后停止?

我想到的一种解决方案是在 bash 和超时 bash 中运行程序,如下所示:

timeout 1 bash -c './program'

然后,1 秒后,bash 终止,因此它运行的程序也终止。这是一个好的解决方案吗?

scripting timeout
  • 2 个回答
  • 1286 Views
Martin Hope
Erel Segal-Halevi
Asked: 2019-03-11 23:58:27 +0800 CST

将 stderr 永久重定向到 stdout

  • 1

我有一个包含许多命令的 bash 脚本,其中一些可能会生成错误消息。通常,错误消息和输出消息以明显不正确的顺序混合在一起(例如,我看到命令 #2 的输出,然后是命令 #1 的错误消息)。

据我了解,原因是这些命令使用两个输出流——stdout 和 stderr——并且它们中的每一个都异步打印到控制台。因此,一种解决方案是通过在每个命令后添加“2>&1”来将 stderr 重定向到 stdout。

但由于我有很多命令,最好对所有命令执行一次。是否有一个命令可以放在脚本的开头,以确保所有命令的所有错误消息都重定向到标准输出,以便所有输出以正确的顺序显示?

bash io-redirection
  • 1 个回答
  • 896 Views
Martin Hope
Erel Segal-Halevi
Asked: 2019-02-16 05:27:35 +0800 CST

如何在反引号中使用变量

  • 4

我有一个 bash 脚本,它接受参数“$input”并(除其他外)将其引导到程序中并收集输出。

目前我的线路是:

OUTPUT=`./main.exe < $input`

但我收到以下错误:

$input: ambiguous redirect

正确的方法是什么?

bash scripting
  • 1 个回答
  • 1384 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve