标签: pipe

如何在没有临时文件的情况下将一些文本附加到管道

我试图从我有一个程序的几个版本的目录中获取最大版本号

例如,如果ls的输出是

something01_1.sh
something02_0.1.2.sh
something02_0.1.sh
something02_1.1.sh
something02_1.2.sh
something02_2.0.sh
something02_2.1.sh
something02_2.3.sh
something02_3.1.2.sh
something.sh
Run Code Online (Sandbox Code Playgroud)

我得到的最大版本号如下 -

ls somedir | grep some_prefix | cut -d '_' -f2 | sort -t '.' -k1 -r | head -n 1
Run Code Online (Sandbox Code Playgroud)

现在,如果同时我想用我已经在系统中的版本号检查它,最好的方法是什么...

在bash我得到了这个工作(如果2.5是当前版本)

(ls somedir | grep some_prefix | cut -d '_' -f2; echo 2.5) | sort -t '.' -k1 -r | head -n 1
Run Code Online (Sandbox Code Playgroud)

有没有其他正确的方法呢?

编辑:在上面的例子中some_prefix是something02.

编辑:这里的实际问题是

(ls smthing; echo more) | sort 
Run Code Online (Sandbox Code Playgroud)

它是将两个命令/程序的输出合并为第三个管道的最佳方法.

unix linux bash shell pipe

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

Perl open(FH,"grep foo bar |") - 当grep什么都不返回时,关闭FH失败

我正在打开grep命令的管道并逐行读取结果.完成后,我关闭管道.如果grep找到了什么,close()正常完成.如果grep 没有找到任何内容,则close()不起作用.

这是foo来演示这个问题:

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

my $search = shift // die "Usage: foo search_string";

open my $grep_h, "grep '$search' ./foo |"
  or die "open grep failed: $!";

while (defined (my $line = <$grep_h>)) {
    chomp $line;
    say "\t: $line";
}
close $grep_h or warn "Error closing grep pipe: $!";
Run Code Online (Sandbox Code Playgroud)

在这里,我调用foo来搜索'warn':

~/private/perl$ ./foo warn
    : use warnings;
    : close $grep_h or warn …
Run Code Online (Sandbox Code Playgroud)

perl pipe

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

字符串和管道中的奇怪行为

我有一个程序:

    int main()
    {
      int* p_fd = (int*)malloc(2*sizeof(int));
      char buf[100];
      pipe(p_fd);
      write(p_fd[1],"hello", strlen("hello"));
      int n;
      n = read(p_fd[0],buf,100);
      //printf("n is: %d\n",n);                // this line is important!
      buf[n]="\0";                             // this line triggers warning?
      printf("%s\n",buf);
    }
Run Code Online (Sandbox Code Playgroud)

当我编辑这个文件时,我总是得到警告:

[esolve@kitty temp]$ gcc -o temp temp.c
temp.c: In function ‘main’:
temp.c:38:9: warning: assignment makes integer from pointer without a cast [enabled by default]
Run Code Online (Sandbox Code Playgroud)

如果没有这一行printf("n is: %d\n",n); ,结果是:

[esolve@kitty temp]$ ./temp
 hellon
Run Code Online (Sandbox Code Playgroud)

有了这一行,我得到了预期的结果:

    [esolve@kitty temp$ ./temp
    n is: 5
    hello
Run Code Online (Sandbox Code Playgroud)

为什么这条线如此重要?谢谢!

c string pipe

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

为循环中的变量赋值

这里有2段代码,值in $1是包含3行文本的文件名.

现在,我有一个问题.在第一段代码中,我无法从循环中获得"正确"的值,但在第二段代码中,我可以得到正确的结果.我不知道为什么.

如何让第一段代码得到正确的结果?

#!/bin/bash

count=0
cat "$1" | while read line
do
    count=$[ $count + 1 ]
done
echo "$count line(s) in all."

#-----------------------------------------

count2=0
for var in a b c
do
    count2=$[ $count2 + 1 ]
done
echo "$count2 line(s) in all."
Run Code Online (Sandbox Code Playgroud)

bash loops pipe

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

为什么Linux中的空间会丢失空间?

我在Linux中遇到管道问题.管道后看起来空格字符丢失了.运行以下C++代码

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main(){
    char s[] = "ab cd", c;
    int n = strlen(s);
    for(int i = 0; i<n && (cin >> c); i++)
        if(s[i] != c){
            printf("wrong at %d : '%c' != '%c' \n", i, s[i], c);
            break;
        }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

echo "ab cd" | ./checker
Run Code Online (Sandbox Code Playgroud)

shell命令给出

wrong at 2 : ' ' != 'c'
Run Code Online (Sandbox Code Playgroud)

这是正常的行为吗?如何避免丢失管道中的字符?

c++ pipe

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

同一管道的多个读取进程都可以读取同一条消息

如果有人知道我对管道的帮助表示怀疑,

一个管道可以同时由多个进程共享,从而允许这些进程彼此交换“消息”。当同一管道有多个读取进程时,是否都可以读取同一条消息(仅发送一次而不是多个副本)?

在多线程环境中,写入管道时,进程发送的消息是否可能已损坏?

感谢收听

c unix pipe process

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

IF语句中的语句如何工作?

我刚刚在进程间通信中开始编程教育,这段代码是在父进程代码部分编写的.根据我所读到的内容write(),-1如果失败则返回,0如果没有写入,则返回,如果成功则返回pipe()正整数.究竟是如何sizeof(value)帮助我们识别出来的?不是if(write(request[WRITE],&value,sizeof(value) < 1)一个更友好的阅读替代什么的sizeof(value).

if(sizeof(value)!=write(request[WRITE],&value,sizeof(value)))
{
     perror("Cannot write thru pipe.\n");
     return 1;
}
Run Code Online (Sandbox Code Playgroud)

代码说明:变量value是父进程中数字的输入,然后父进程通过子管发送给子进程,子进程对其进行一些算术运算.

任何有关该主题的澄清的帮助都非常适用.

编辑:在提问时如何突出显示我的系统功能?

c linux ipc pipe

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

Postgres声明管道包含引用的冒号

当postgres中的SQL语句写成如下所示时,这意味着什么?

SELECT 
    name||' ::: '||id AS title
FROM 
    my_table;
Run Code Online (Sandbox Code Playgroud)

在Google中搜索几乎是不可能的!管道和封闭的引用冒号做什么?

sql string postgresql pipe psql

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

如何管理所有终端输出,包括从脚本到日志文件的错误消息

我正在尝试为大型备份文件创建可读的日志文件.
在脚本中,我只是将命令的所有输出传递给一个大文件,然后可以通过脚本"清理".例如:

echo "Error occurred" >> log.file
mount disk >> log.file
Run Code Online (Sandbox Code Playgroud)

在执行脚本时,我错过了警告和错误,我在控制台管道.

backup.script >> log.file
Run Code Online (Sandbox Code Playgroud)

但即便如此,当我通过cron执行脚本(带管道)时,错误消息并不总是记录在我的文件中,我从rsync和脚本错误中收到邮件:

rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: write failed on "/mnt/backup1/xxxxx": No space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(322) [receiver=3.0.9]
rsync: connection unexpectedly closed (215 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
Run Code Online (Sandbox Code Playgroud)

并在发生脚本错误时:

/data/scripts/backup.auto: line 320: syntax error …
Run Code Online (Sandbox Code Playgroud)

bash scripting error-reporting pipe

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

C:pipe()和fork()

试图澄清我对fork()和pipe()的理解.我知道pipe()是一种在两个进程之间传输数据的单向方法.如果在父进程中,我在两个整数数组上调用pipe(),然后我将它分叉,这是否有效地创建了两个允许我双向传输数据的管道?(即让父母从标准中读取并且孩子写入标准输出,或者类似地让父母写入标准输出并且孩子从标准中读取?)

c linux fork pipe

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

标签 统计

pipe ×10

c ×4

bash ×3

linux ×3

string ×2

unix ×2

c++ ×1

error-reporting ×1

fork ×1

ipc ×1

loops ×1

perl ×1

postgresql ×1

process ×1

psql ×1

scripting ×1

shell ×1

sql ×1