好吧,我搜索了这个,但没找到。如果之前已经回答过,请道歉。
基本上我有一个类程序,它创建两个无名管道并使用它们在父进程和子进程之间进行通信。该命令从父级传递到子级,子级执行该命令并向父级返回成功/错误消息。然后父级打印出成功/错误消息。很简单,我已经做到了。现在的问题是我需要循环它直到用户给出“退出”命令。我想我需要一个 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) 有 3 个文件(a、b和c),均具有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脚本 …
我无法让管道和支架[]一起工作。我怀疑我不明白管道是如何工作的。
我试图用括号和竖线来回答以下问题: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 我得到一个空的数据框,这让我很困惑。
考虑:
./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隐式发生?
我和几个同事想知道为什么
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)
做?
我有输入文件foo1.txt、foo2.txt、foo3.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)
我敢打赌,有一些非常简单的命令可以在一行中为我完成此操作,也许可以使用嵌套管道和通配符。有任何想法吗?
如果将多个参数传递给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)
然后扩展$ …
当我在python shell中执行以下操作时!
>> print 2 | 4
>> 6
Run Code Online (Sandbox Code Playgroud)
为什么python中的管道符号会添加到整数?
我试图用一个管道与cd和ls这样的:
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?使用管道时其他命令没有任何问题.
我有一段代码(见下文)从作为命令行参数给出的文件中读取数据。我想添加对能够从管道读取输入的支持。例如,当前版本将数据读取为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 中的一种非常规文件类型。但是我该如何处理呢?