有没有办法将字符串发送到 AIX 中现有 PID 的 STDIN?

有没有办法将字符串发送到 AIX 中现有 PID 的 STDIN?

为了给您一些上下文,在 AIX 中运行一个 ksh 脚本,其中包含一条rm file.txt指令 - 问题是该文件由共享组所有,但由其他用户拥有,使脚本的rm命令要求确认...

因此,该rm命令正在等待删除文件的确认,期望从命令行(来自)中出现y或,并且由于这是从另一个脚本运行的,因此在nSTDIN非交互式方式,我们没有办法输入里面有一个值。

我们用谷歌搜索了我们拥有的不同选项,但我们的所有内容都是针对 Linux 或 Solaris 的 - 引起我们注意的一件事是解决方法对于 Linux,涉及覆盖 PID 的 STDIN 文件描述符的值,这在理论上很有意义,但遗憾的是,实际上,这在 AIX 中的工作方式与在 Linux 上的工作方式不同。

foo@bar - /my/dir $ ps -fT 45023400
     UID      PID     PPID   C    STIME    TTY  TIME CMD
  foo 45023400 16449852   0 11:38:50 pts/17  0:00 /usr/bin/perl script1.pl
  foo  1507590 45023400   0 11:38:50 pts/17  0:00     \--/bin/sh script2.sh
  foo 50987084  1507590   0 11:38:51 pts/17  0:00         \--rm file.txt

我们最终杀死了 PID 45023400,但我确信这不是发生这种情况时唯一的解决方案......所以我的问题是:有没有办法发送AIX 中现有 PID 的 STDIN 字符串?

根据 Linux 论坛中的说明,您可以将回显重定向到与上述 PID 的 STDIN 相对应的文件描述符,但这在本例中不起作用:

foo@bar - /my/dir $ ls -l /proc/50987084/fd/
total 0
c---------    1 foo   cm           24, 17 Mar  8 13:43 0
p---------    0 foo   cm                0 Mar  8 11:38 1
p---------    0 foo   cm                0 Mar  8 11:38 2

foo@bar - /my/dir $ echo n > /proc/50987084/fd/0
Permission denied
ksh: /proc/50987084/fd/0: cannot create

我们遇到了一个Permission denied错误,考虑到文件描述符不遵守,我认为这是可以的普通的文件的 mod 规则...或者至少在 AIX 中不是:(

答案1

我想rm -f可能对你有用:

   -f
        Does not prompt before removing a write-protected file. Does not display an error message or return error status if
        a specified file does not exist. If both the -f and -i flags are specified, the last one specified takes affect.

相关内容