为了给您一些上下文,在 AIX 中运行一个 ksh 脚本,其中包含一条rm file.txt
指令 - 问题是该文件由共享组所有,但由其他用户拥有,使脚本的rm
命令要求确认...
因此,该rm
命令正在等待删除文件的确认,期望从命令行(来自)中出现y
或,并且由于这是从另一个脚本运行的,因此在n
STDIN
非交互式方式,我们没有办法输入里面有一个值。
我们用谷歌搜索了我们拥有的不同选项,但我们的所有内容都是针对 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.