I have a script in bash-3.00 that needs to execute the following:
pkgrm [package-name] (to remove an existing package)
pkgadd -d [package-path] ( to install a new package)
The problem is that both commands prompt me to answer either y,n or q in order to proceed with removal/addition 3 times each. If I just run the command I will have to type 'y' and press Enter 3 times (for pkgrm) and type 'all' one time and 'y' two times both followed by Enter (for pkgadd).
I tried to automate this using the following:
echo "Removing existing package..."
pkgrm $PACKAGE << EOF
y
y
y
EOF
echo "Adding new package..."
pkgadd -d $PATH/$PACKAGE.pkg << EOF
all
y
y
EOF
but it's not working. In fact only the first input line works (first 'y' for pkgrm and 'all' for pkgadd) and then the command exits as If I had typed 'q'.
Can anyone help me on this? Is there any way that I can automate this so that I won't have to answer the questions manually?
I tried using the -n option but this only bypasses the first question which is:
"Do you want to remove this package? [y,n,?,q]"
-n just automates this question and after that I get the second one along with the error message:
"This package contains scripts which will be executed with super-user
permission during the process of removing this package.
Removal of <new_package> was suspended (interaction required)."
and the script terminates.
If I don't use -n then the second prompt is:
"This package contains scripts which will be executed with super-user
permission during the process of removing this package.
Do you want to continue with the removal of this package [y,n,?,q]
Removal of <new_package> failed.
No changes were made to the system." (looks like I typed 'n' or 'q')
The pkgrm works fine if I use "yes | pkgrm [package-name]" because all the answers should be 'y'.
However pkgadd doesn't work because the first answer should be 'all' and the second 'y'. I tried using an input file as the topic in the link suggests by having:
bash-3.00$ cat input
all
y
bash-3.00$
but it doesn't work. I tried using a combination of " yes | ..." and an input file but it doesn't work as well.
I need to use both pkgrm and pkgadd. pkgrm works fine if i use
yes | pkgrm $PACKAGE (without echo)
The problem is with the pkgadd because the first answer should be 'all' and the second 'y'. Not all the answers are yes otherwise the above trick would work for pkgadd as well. I also tried using an input file with :
all
y
but it doesn't work. If you read my previous post again you will understand. Any other help?
Just to clarify: "yes" (/usr/bin/yes) is a tool which produces streams of "y^M" (a "y" followed by a newline). AIX has it as any other Unix derivate i am aware of.
I suspect the reason why pkgadd does not work with an input redirection is because it clears the input channel before reading the second input. This is meant as a security device (to avoid answers which in fact are just accidentally doubly typed keys from the last answer) but is in fact puting an obstacle in using the tool in any pipeline or pipeline-like construct. This is plain bad programming style of the i-have-not-understood-Unix-concepts category.
Aside from feeling sympathetically with you i fear there is no solution to this problem. pkgadd is simply programmed badly on your system.