标签: stdout

354
推荐指数
5
解决办法
59万
查看次数

15.04 上的 systemd 不会记录单元的标准输出

我目前正在尝试将 systemd 单元制作为 Web 服务器。目前,我的foo.service文件如下所示:

[Unit]
Description=The Foo Web Server

[Service]
Type=simple
ExecStart=/opt/foo/.cabal-sandbox/bin/foo

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

该foo可执行文件自动记录所有的HTTP请求到标准输出-这是很好的测试。但是,当我查看日志时journalctl -u foo,我只能得到这样的输出:

...
May 06 17:46:57 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:46:57 localhost systemd[1]: Started Foo Web Server.
May 06 17:46:57 localhost systemd[1]: Starting The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Started The Foo Web Server.
May 06 17:47:08 localhost systemd[1]: Starting …
Run Code Online (Sandbox Code Playgroud)

logging log stdout systemd 15.04

16
推荐指数
1
解决办法
9106
查看次数

命令末尾的 & 是什么意思?

我有一个启动脚本行:

pyprogramm >> /dev/null  2>&1 &
Run Code Online (Sandbox Code Playgroud)

含义:

>> /dev/null - redirect stdout to null device
2>&1 - redirect stderr to stdout (that is redirected to null device)
Run Code Online (Sandbox Code Playgroud)

但最后一个&是什么意思?

bash scripts job-control stdout

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

如何查看启动应用程序的标准输出/标准错误?

我在启动应用程序中的某些命令在我登录时无法正常启动。(特别是我在使用 gtk-redshift 时遇到了问题。)为了调试,我希望能够查看 stdout/stderr。我还没有找到启动应用程序的日志文件。我尝试使用“>> log.txt”重定向到一个文件,但没有成功。

如何查看启动应用程序的 stdout/stderr?更好的是,是否有启动应用程序的日志文件?

log startup-applications stdout

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

systemd 服务输出到终端/pty

我无法弄清楚要StandardOutput=为单元文件 ( .service)传递什么选项,我想在连接的终端上从服务启动的位置显示一些消息!( console/tty好像不是我想要的)

也许可以更改/etc/systemd/system.conf全局默认值DefaultStandardOutput=journal,但我不想这样做!我只对显示我的单元文件中的一些进度/启动消息感兴趣(例如systemd-run -P)

我在 Ubuntu 18.04.2

# systemd --version
systemd 237
Run Code Online (Sandbox Code Playgroud)

stdout systemd 18.04

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

为什么不解析 apt-key 输出?

为了验证是否安装了 docker gpg 密钥,我运行了:

sudo apt-key fingerprint 0EBFCD88 | grep "9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88"
Run Code Online (Sandbox Code Playgroud)

这导致了以下输出:

Warning: apt-key output should not be parsed (stdout is not a terminal)
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
Run Code Online (Sandbox Code Playgroud)

我发现了这个关于如何规避警告的Stack Overflow 问题,但我找不到任何关于它为什么首先出现的来源?你不应该解析apt-key输出的原因是什么?

command-line grep stdout

6
推荐指数
1
解决办法
7031
查看次数

管道输出命令列

我正在使用 lolcat 来获取 ls 的彩色输出。为此,我已将 /usr/bin/ls 复制到 /usr/bin/lsslss(以避免由于别名无法接受 $* 或 $@ 而导致无限循环),并且我添加了该函数:

ls(){ lsslss $* | lolcat; } 到 .bashrc

问题是,当我使用 ls 时,管道一次通过管道传输每个文件,因此它显示为一个长列表,如下所示:

在此处输入图片说明

而不是这样的表:

在此处输入图片说明

要将其更改为表,我可以将输出通过管道传输到列命令中。但是当我这样做时,它又变回了一个长列表(可能是因为列只对其进行格式化而不是将其更改为行)

我原本打算这样做:

ls(){ lsslss $* | columns | lolcat; }

无论如何,我想知道有没有办法通过管道传输原始输出而不是使用 | 能够将列的输出通过管道传输到 lolcat 中?

提前致谢。抱歉,如果我的问题措辞不当或难以理解。我几乎总能找到已经问过的问题,所以我不经常发布问题。

command-line bash pipe stdout

5
推荐指数
1
解决办法
1140
查看次数

如何将命令的输出重定向到函数但抑制错误并输出到控制台?

我需要将我正在运行的命令的输出重定向到带有时间戳的日志文件(因此是一个函数而不是日志文件本身),但错误和输出都不应该显示在控制台中。下列 -

command | my_func 2> /dev/null 
Run Code Online (Sandbox Code Playgroud)

不管用。

就像是

command 2> logfile
Run Code Online (Sandbox Code Playgroud)

有效,但我无法在第二种情况下记录时间戳。我该怎么办?

bash error-handling stdout timestamp

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

当管道输出到文件时,为什么 stderr 和 stdout 的顺序错误?

我有一个 perl 脚本:

warn "1\n";
print "2\n";
warn "3\n";
print "4\n";
Run Code Online (Sandbox Code Playgroud)

我将输出通过管道传输到文件:

perl script.pl &> foo
Run Code Online (Sandbox Code Playgroud)

猫福:

1
3
2
4
Run Code Online (Sandbox Code Playgroud)

为什么输出不按顺序,我该如何解决?

bash perl pipe stdout

3
推荐指数
1
解决办法
1181
查看次数

nc 的 STDOUT 和 STDERR 重定向

我正在尝试制作一个看门狗 bash 脚本,它必须根据退出状态检查端口是否打开,否则应该启动守护程序。问题是我无法通过重定向 STDOUT 和 STDERR 来避免脚本输出任何信息。

nc -zv 1.2.3.4 55 | grep " open " >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

或者

nc -zv 1.2.3.4 55 | grep " open " 2>&1 >/dev/null
Run Code Online (Sandbox Code Playgroud)

或者

nc -zv 1.2.3.4 55 | grep " open " &>/dev/null
Run Code Online (Sandbox Code Playgroud)

反正回来

'FQDN_hostname_or_domainname [1.2.3.4] 55 (?) open'
Run Code Online (Sandbox Code Playgroud)

不过,此组合可与其他命令一起使用,例如netstat. 是关于 netcat 的,还是关于 bash 语法的?请让我知道我出了什么问题。

bash scripts stdout netcat

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

未写入标准输出的控制台输出示例

似乎read没有写入标准输出。

$ cat test.sh
#!/bin/bash
read -p “输入一个键并回车”键
echo "密钥是 $key"
$ ./test.sh
键入一个键和 Enterx
关键是 x
$ ./test.sh | 三通文件
键入一个键和 Enterx
关键是 x
$猫文件
关键是 x

在没有脚本的情况下尝试...

$ read -p "键入一个键并回车" key | 三通文件
键入一个键和 Enterx
$猫文件
$ 

此处read描述了该命令。简要说明:“从标准输入中读取一行”。

有关管道的信息|,来自William E. Shotts 的The Linux Command Line (2nd Internet Edition)。

使用管道运算符“|” (竖线),一个命令的标准输出可以通过管道传输到另一个命令的标准输入: command1 | command2

从手册页tee是这样的描述:

从标准输入读取并写入标准输出和文件

的手册页tee位于此链接。

写入控制台但实际上不使用标准输出的程序的所有其他示例的列表在哪里,或者在没有这样的列表的情况下,知道何时写入控制台的程序不使用的一般规则是什么?使用标准输出?

这似乎read违反了最小惊讶原则 …

command-line bash stdout

3
推荐指数
1
解决办法
2252
查看次数

如何让git产生输出到文件?

我想git clone使用

git clone https://github.com/someRepository > git_clone.file
Run Code Online (Sandbox Code Playgroud)

但相反,我在终端中显示/更新了输出,例如

Cloning to 'someRepository' ...
remote: Counting objects: 2618, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 2618 (delta 2), reused 12 (delta 1), pack-reused 2603
Received objects: 100% (2618/2618), 258.95 MiB | 4.39 MiB/s, Done.
Resolving Differences auf: 100% (1058/1058), Done.
Check Connectivity ... Done.
Run Code Online (Sandbox Code Playgroud)

但文件git_clone.file已生成但仍为空。

我最初的目标是绕过输出git到函数中(请参阅我的问题here)。但是现在我意识到git甚至似乎没有产生stdout真正但不知何故不同的输出,因为没有任何内容写入文件。

如何从中获取此显示的输出git以将其重定向到文件/函数?


编辑

建议的stderr(and stdout)重定向没有解决问题。

git clone https://github.com/someRepository …
Run Code Online (Sandbox Code Playgroud)

command-line bash git output stdout

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

直接压缩标准输出

有人能告诉我是否可以直接压缩标准输出?

我想在不创建临时文件 files.txt 的情况下一步完成此操作...

例子:

cat file* > files.txt
tar -czf files.tar files.txt
rm files.txt
Run Code Online (Sandbox Code Playgroud)

这可能吗?

command-line tar stdout

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