[PATCH] cmdline: allow to specify a script directly in pipeline

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Currently, when using pipe in command line, we cannot specify
a script with shebang directly like this:

  crash> foreach bt | ./analyze.awk
  crash: pipe operation failed

  (or it looks like crash can loop until Ctrl-C depending on timing)

This is a bit confusing and inconvenient because it's not shell-like
behavior.

The cause is that output_command_to_pids() searches /proc/PID/stat
files for "(path/to/script)" string and cannot find such process,
and also the ps kludge doesn't work well in this case.  This patch
removes the part except its file name like "(script)" so that it can
find the process.

Signed-off-by: Kazuhito Hagio <k-hagio@xxxxxxxxxxxxx>
---
 cmdline.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/cmdline.c b/cmdline.c
index ee08f06..c0a9f4f 100644
--- a/cmdline.c
+++ b/cmdline.c
@@ -806,7 +806,7 @@ output_command_to_pids(void)
         char buf1[BUFSIZE];
         char buf2[BUFSIZE];
         char lookfor[BUFSIZE+2];
-        char *pid, *name, *status, *p_pid, *pgrp;
+        char *pid, *name, *status, *p_pid, *pgrp, *comm;
 	char *arglist[MAXARGS];
 	int argc;
 	FILE *pipe;
@@ -815,7 +815,8 @@ output_command_to_pids(void)
 	retries = 0;
 	shell_has_exited = FALSE;
 	pc->pipe_pid = pc->pipe_shell_pid = 0;
-        sprintf(lookfor, "(%s)", pc->pipe_command);
+	comm = strrchr(pc->pipe_command, '/');
+	sprintf(lookfor, "(%s)", comm ? ++comm : pc->pipe_command);
 	stall(1000);
 retry:
         if (is_directory("/proc") && (dirp = opendir("/proc"))) {
-- 
1.8.3.1

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility



[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux