Sponsored Content
Top Forums Shell Programming and Scripting How to send data to previous program (pipe)? Post 303012660 by Corona688 on Wednesday 7th of February 2018 10:58:40 AM
Old 02-07-2018
Quote:
Originally Posted by JackK
I didn't know about coprocesses before. In my case, I think, writing a parser with coprocesses is not needed and too complicated (for such a small requirement).
Once again, what you're asking for isn't exactly trivial.

You can communicate with the previous process with a named pipe, but this will be a bit complicated to set up and prone to deadlocks afterwards (who's waiting for whom?) With all those caveats, here is how you do it:

Code:
#!/bin/bash

exec 1>&3 # Save stdout into FD 3 if we need it
mkfifo /tmp/$$

echo "fifo is /tmp/$$"

(       # Process A.  stdout writes to pipe.
        exec < /tmp/$$ # Redirect stdin from named pipe

        for X in 1 2 3
        do
                read ASDF
                echo "string: $ASDF"
        done
) | (
        # Process B.  stdin reads from pipe.
        exec > /tmp/$$  # Redirect stdout into named pipe
        rm -f /tmp/$$

        for X in 1 2 3
        do
                echo $X
                read REPLY
                echo "Reply was '$REPLY'" >&3 # Write to old stdout
        done
)

The sticky part is opening the named pipe. That has to be done in different subshells because exec < namedpipe and exec > namedpipe must happen simultaneously: If two processes aren't trying to open it, the will force your program to wait. This for example will not work:

Code:
exec 5<namedpipe # Will wait forever since the line below it will not run
exec 6>namedpipe

$$ is just a convenient random-ish number.

Last edited by Corona688; 02-07-2018 at 12:04 PM..
 

10 More Discussions You Might Find Interesting

1. Programming

C++ How to use pipe() & fork() with stdin and stdout to another program

Hi, Program A: uses pipe() I am able to read the stdout of PROGAM B (stdout got through system() command) into PROGRAM A using: * child -> dup2(fd, STDOUT_FILENO); -> execl("/path/PROGRAM B", "PROGRAM B", NULL); * parent -> char line; -> read(fd, line, 100); Question:... (2 Replies)
Discussion started by: vvaidyan
2 Replies

2. UNIX for Dummies Questions & Answers

Script to open program and send/execute command in program

Hi, i want to write a script that executes a program (exec?) . this program then requires a filename as input. how do i give it this input in the script so the program will be complete run and close by the script. e.g. exec prog.exe program then asks for filename "enter filename:"... (1 Reply)
Discussion started by: tuathan
1 Replies

3. Shell Programming and Scripting

Writing a program to receive the GPS data and send to other server

Hi, I would like to write a program to receive the GPS data and then send the data via network to other program. All of the program is not write yet(include host and sender) All of the server OS is unix or linux Could you mind to give me some idea to do this? Thanks so much! Ken ... (2 Replies)
Discussion started by: kenlok
2 Replies

4. Solaris

sendmail pipe to a program.

Hello, I recently upgraded our server from Solaris 8 to 9. The sendmail is unabled to pipe the email to a perl script. I can send and received email to local and external mail, but the script did not get the email. There is no error in the log and I could not find any thing on the web. Here... (0 Replies)
Discussion started by: ld98
0 Replies

5. Programming

pipe program in C

Hello guys, my professor give me 2 days to study and make a program usign pipe, fork in c i need to do a program read a arq.txt the father process read the file and the child print ! like this #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int main (){ ... (1 Reply)
Discussion started by: beandj
1 Replies

6. Homework & Coursework Questions

pipe program in C

Hello guys, my professor give me 2 days to study and make a program usign pipe, fork in c i need to do a program read a arq.txt the father process read the file and the child print ! 2. Relevant commands, code, scripts, algorithms: like this Code: #include <stdio.h>... (1 Reply)
Discussion started by: beandj
1 Replies

7. UNIX for Advanced & Expert Users

sftp error:- Couldn't send packet: Broken pipe

Hi, I am trying to sftp a large file(appx. 2 GB size) from solaris 10 to a Linux server. While sftping(with no options), connection is terminated after some time with broken pipe error. sftp with option -R1 or -B1500 is successful. Linux server ssh Version: OpenSSH_3.9p1, OpenSSL 0.9.7a... (3 Replies)
Discussion started by: brij123
3 Replies

8. Linux

Perl program to print previous set of lines once a pattern is matched

Hi all, I have a text data file. My aim here is to find line called *FIELD* AV for every record and print lines after that till *FIELD* RF. But here I want first 3 to four lines for very record as well. FIELD AV is some where in between for very record. SO I am not sure how to retrieve lines in... (2 Replies)
Discussion started by: kaav06
2 Replies

9. Shell Programming and Scripting

Perl to send previous and current value

For example, I have a file called number.txt. x y 1 1 2 4 3 9 4 6 5 5 6 6 7 9 8 4 9 1 10 0 ... And I want to print out the value of x and y, if y%4==0 and the next value of y%4==0. Thus, the sample output is: 1 1 *because the previous x before 2 is 1 2 4 *because 4%4 == 0 7 9... (2 Replies)
Discussion started by: Tzeronone
2 Replies

10. Solaris

RWSocket::send: Broken pipe Error in /var/adm/messages

Hi Guys, I am getting some strange error in /var/adm/messages in my Solaris 10 box with Veritas Cluster and EMC storage. bash-3.00$ cat /var/adm/messages | egrep -v "lw8|snmp|sshd|xntpd|kern.info|LOGIN|link|service|started|finished|repeated|SS7 Log-daemon|success" Dec 18 09:58:35 GAMMa2... (1 Reply)
Discussion started by: vivek.goel.piet
1 Replies
DH-EXEC-INSTALL(1)						      dh-exec							DH-EXEC-INSTALL(1)

NAME
dh-exec-install - Install (and possibly rename) files. SYNOPSIS
#! /usr/bin/dh-exec debian/default.conf => /etc/my-package/start.conf usr/bin/* DESCRIPTION
Being a sub-command of dh-exec(1), this program must not be ran directly, but through dh-exec, which automatically runs all available sub-commands if run bare; or explicitly with dh-exec --with=install. It is meant to be used for dh_install(1) files, and those alone. If it finds that its input is not such a file, it will do nothing, but echo back the contents. The purpose of the program is to extend dh_install(1)'s functionality, by allowing to specify a destination filename. This can be accomplished by a special syntax: the " => " mark between a source and a destination means that the source file should be installed with the specified destination name. For obvious reasons, the source must not be a wildcard, and the destination in this case must be a file, and not a directory. All other non-comment lines are left alone. RESTRICTIONS
Due to the way executable scripts are called from debhelper(1), there is no way to know what options were used for the original dh_install(1). This means, that the --sourcedir option of dh_install(1) will not work correctly when dh-exec-install is in use. IMPLEMENTATION
Internally, the renaming happens by creating a temporary directory under debian/tmp/, and copying (or moving, if the source was under debian/tmp/ to begin with) the file there, with the new name. This is done this way to allow dh_install(1) to do the real copying, and allow its options to continue working, even when renaming is involved. The temporary directory is put under debian/tmp so that it will be cleaned by dh_prep(1) when the clean target gets to run. Thus, no extra code is needed anywhere to clean up the renamed files. ENVIRONMENT
DH_EXEC_SCRIPTDIR Indicates which directory the command-specific scripts should be sought for. If not specified, scripts will be searched for in /usr/share/dh-exec/. FILES
$DH_EXEC_SCRIPTDIR/dh-exec-install-* The various scripts for the higher-level program. SEE ALSO
debhelper(1), dh-exec(1), dh_install(1) AUTHOR
dh-exec-install is copyright (C) 2011-2012 by Gergely Nagy <algernon@madhouse-project.org>. 2012-05-03 DH-EXEC-INSTALL(1)
All times are GMT -4. The time now is 04:24 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy