标签: pipe

在 C 中循环无名管道

好吧,我搜索了这个,但没找到。如果之前已经回答过,请道歉。

基本上我有一个类程序,它创建两个无名管道并使用它们在父进程和子进程之间进行通信。该命令从父级传递到子级,子级执行该命令并向父级返回成功/错误消息。然后父级打印出成功/错误消息。很简单,我已经做到了。现在的问题是我需要循环它直到用户给出“退出”命令。我想我需要一个 while 循环,但是在尝试放置之后,程序仍然只运行一次,然后退出。这就是我所拥有的。希望这是有道理的,我省略了代码的处理部分,因为该部分有效(就像我所说的,对于一个类),但如果有任何没有意义的事情,我会澄清。预先感谢您的任何帮助。

while (strcmp(cmd,"exit") != 0)
{
/* Create Pipe P to pass command from the  
parent process to the child process and check for errors.*/
    pipe(p);

    /*Create Pipe Q to pass command from the
child process to the parent process and check for errors. */
pipe(q);

/* Create child process */
pid = fork();

switch(pid){

    case -1: /* fork failed */
        perror("main: fork");
        exit(1);
    case 0: /* Child process */
        /*****************************************
                    Stuff being executed in the child …
Run Code Online (Sandbox Code Playgroud)

c loops pipe

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

bash source 命令不适用于管道

有 3 个文件(abc),均具有777权限:

$ ls
a  b  c
Run Code Online (Sandbox Code Playgroud)

上述文件有以下内容:

$ cat a
#!/bin/bash
export A=aaa
$ cat b
#!/bin/bash
source ./a
echo $A
$ cat c
#!/bin/bash
source ./a | >> log
echo $A
Run Code Online (Sandbox Code Playgroud)

b和之间的唯一区别c| >> log

$ diff b c
2c2
< source ./a
---
> source ./a | >> log
Run Code Online (Sandbox Code Playgroud)

执行时b会输出预期的结果aaa

$ ./b
aaa
Run Code Online (Sandbox Code Playgroud)

执行时c,对我来说,它输出一个意外的空白行而不是预期的aaa,并且log脚本 …

bash pipe

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

在 R 中使用括号和管道进行子集化/过滤

我无法让管道和支架[]一起工作。我怀疑我不明白管道是如何工作的。

我试图用括号和竖线来回答以下问题:1952 年最富有的国家叫什么名字?(数据来自包gapminder

我努力了:

1. df[df$year == 1970,] %>% df[df$money == max(df$money),]["country"]

2. df %>% filter(year=="1970") %>% df[df$money == max(df$money),]["country"]

3. df %>% filter(year=="1970") %>% filter(money == max(df$money))
Run Code Online (Sandbox Code Playgroud)

无需管道即可使用 - 所有线路均独立工作。我并不是在寻找问题的另一种解决方案,而是为了更好地理解管道和支架,并利用它们来解决问题。对于 1. 和 2. 我得到的错误是Error in xj[i] : invalid subscript type 'list',而对于 3 我得到一个空的数据框,这让我很困惑。

brackets r pipe filter

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

这是隐式管道吗?

考虑:

./wordcount.py < war_and_peace.txt | sort -grk 2 | head
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,以下代码也有效并产生相同的输出:

./wordcount.py < war_and_peace.txt sort -grk 2 | head
Run Code Online (Sandbox Code Playgroud)

后一个命令如何解释?管道是否sort隐式发生?

bash ubuntu pipe

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

管道内 `summary()` 的奇怪(?)行为

我和几个同事想知道为什么

N <- rnorm(16) %>% matrix(., ncol = 4) %>% `colnames<-`(letters[1:4]) %T>% summary()
Run Code Online (Sandbox Code Playgroud)

或者

N <- rnorm(16) %>% matrix(., ncol = 4) %>% `colnames<-`(letters[1:4]) %T>% summary() %>% `+`(., 0)
Run Code Online (Sandbox Code Playgroud)

不起作用(不打印摘要),而

N <- rnorm(16) %>% matrix(., ncol = 4) %>% `colnames<-`(letters[1:4]) %T>% {print(summary(.))}
Run Code Online (Sandbox Code Playgroud)

做?

r pipe magrittr tidyverse

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

Bash 嵌套管道和通配符

我有输入文件foo1.txtfoo2.txtfoo3.txt等。我有一些命令munge可以处理输入文件,但是(由于与此处不相关的原因)该命令一次只能处理一个输入文件。我想将输出合并为一个out.txt.

我知道我可以cat foo*.txt连接所有输入文件,但如上所述munge只能对每个单独的文件起作用。也就是说,munge如果我这样做的话,我不会喜欢它cat foo*.txt | munge > out.txt。相反,我需要在连接输出之前对每个文件执行处理。

我确信我可以使用 循环输入文件for,但是如何组合输出呢?

基本上我正在寻找类似的东西,而不预先枚举所有输入文件。

cat foo1.txt | munge > out1.txt
cat foo2.txt | munge > out2.txt
cat foo2.txt | munge > out2.txt
cat out*.txt > out.txt
Run Code Online (Sandbox Code Playgroud)

我敢打赌,有一些非常简单的命令可以在一行中为我完成此操作,也许可以使用嵌套管道和通配符。有任何想法吗?

bash pipe

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

如何在perl系统函数中使用两个管道并防止shell扩展?

如果将多个参数传递给perl的系统函数,则shell扩展将不起作用:

# COMMAND
$ perl -e 'my $s="*"; system("echo", "$s" )'

# RESULT
*
Run Code Online (Sandbox Code Playgroud)

如果命令作为一个参数传递,那么扩展将起作用:

# COMMAND
$ perl -e 'my $s="echo *"; system("$s")'

# RESULT
Desktop Documents Downloads
Run Code Online (Sandbox Code Playgroud)

系统功能还允许使用多个命令并使用管道连接它们.这仅在参数作为一个命令传递时有效:

# COMMAND
$ perl -e 'my $s="echo * | cat -n"; system("$s")'

# RESULT
1 Desktop Documents Downloads
Run Code Online (Sandbox Code Playgroud)

如何组合提到的命令并使用两个管道并防止shell扩展?

我试过了:

# COMMAND
$ perl -e 'my $s="echo"; system("$s", "* | cat -n")'

# RESULT
* | cat -n
Run Code Online (Sandbox Code Playgroud)

但由于我上面描述的原因(多个参数未扩展),这不起作用.我想要的结果是:

1 *
Run Code Online (Sandbox Code Playgroud)

编辑:我实际面临的问题是当我使用以下命令时:

system("echo \"$email_message\" | mailx -s \"$email_subject\" $recipient");
Run Code Online (Sandbox Code Playgroud)

然后扩展$ …

shell perl system pipe variable-expansion

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

为什么python中的管道符号会添加到整数?

当我在python shell中执行以下操作时!

>> print 2 | 4
>> 6
Run Code Online (Sandbox Code Playgroud)

为什么python中的管道符号会添加到整数?

python pipe

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

尝试使用其他命令管道时,为什么cd命令不起作用?

我试图用一个管道与cdls这样的:

ls -l | cd /home/user/someDir
Run Code Online (Sandbox Code Playgroud)

但没有任何反应.

我试过了:

cd /home/user/someDir | ls -l
Run Code Online (Sandbox Code Playgroud)

似乎该cd命令ls -l在当前目录下工作时不执行任何操作.

我正在尝试打开的目录是有效的.

这是为什么?用cd/ 管道命令是否可能ls?使用管道时其他命令没有任何问题.

linux bash ls pipe

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

从 Ada 管道读取输入

我有一段代码(见下文)从作为命令行参数给出的文件中读取数据。我想添加对能够从管道读取输入的支持。例如,当前版本将数据读取为main <file_name>,而它也应该可以做一些 line cmd1 | main。这是从文件中读取数据的来源:

procedure main is

    File : Ada.Text_IO.File_Type;

begin

   if Ada.Command_Line.Argument_Count /= 1 then

      return;

   else

      Ada.Text_IO.Open (
         File => File,
         Mode => In_File,
         Name => Ada.Command_Line.Argument (1));

      while (not Ada.Text_IO.End_Of_File (File)) loop
         -- Read line using Ada.Text_IO.Get_Line
         -- Process the line
      end loop;

      Ada.Text_IO.Close (File);

end main;
Run Code Online (Sandbox Code Playgroud)

如果我理解正确的话,管道只是 Ada 中的一种非常规文件类型。但是我该如何处理呢?

file pipe ada

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

标签 统计

pipe ×10

bash ×4

r ×2

ada ×1

brackets ×1

c ×1

file ×1

filter ×1

linux ×1

loops ×1

ls ×1

magrittr ×1

perl ×1

python ×1

shell ×1

system ×1

tidyverse ×1

ubuntu ×1

variable-expansion ×1