What's the best method for retrieving sender/subject from a pop3 acct, via the command line? - email

I just need to get just the sender's email address and the email subject from a pop3 account, from the command line or a BASH script. I'm running on a MacOS X machines, but want to avoid AppleScript. I've looked at getmail_fetch, but this seems to pull down the entire emails - I was hoping for something more space/time efficient. Is there some obvious trick I'm missing?

Solution using legacy sh.
#!/bin/sh
#
#
STATE=1
USER=myname
PASS=mypass
HOST=mail.example.com
PORT=pop3
MSGFILE=/tmp/msgid
POPFILE=/tmp/popcmds
DONE=/tmp/popdone
doneproc()
{
cat $DONE.tail $DONE.telnet | while read p; do kill -9 $p; done
rm -f $POPFILE $MSGFILE $DONE.tail $DONE.telnet
exit
}
reqmsg()
{
MSGID=`head -1 $MSGFILE`
if [ -z "$MSGID" ]; then echo "QUIT" >>$POPFILE; doneproc; fi
tail -n +2 $MSGFILE > $MSGFILE-
mv $MSGFILE- $MSGFILE
echo "TOP $MSGID" >>$POPFILE
}
rm -f $MSGFILE $DONE.tail $DONE.telnet
> $MSGFILE
> $POPFILE
sh -c "echo \$\$ > $DONE.tail; exec tail -f $POPFILE" | sh -c "echo \$\$ > $DONE.telnet; exec telnet $HOST $PORT" | while read -t 10 f
do
case "$STATE" in
1) case "$f" in
+OK*) echo "USER $USER" >>$POPFILE; STATE=2;;
esac;;
2) case "$f" in
+OK*) echo "PASS $PASS" >>$POPFILE; STATE=3;;
*) echo "Bad response to user command ($f)" >&2; exit 1;;
esac;;
3) case "$f" in
+OK*) echo "LIST" >>$POPFILE; STATE=4;;
*) echo "Bad response to password command ($f)" >&2; exit 1;;
esac;;
4) case "$f" in
+OK*) STATE=5;;
*) echo "Bad response to LIST command ($f)" >&2; exit 1;;
esac;;
5) case "$f" in
.*) reqmsg; STATE=6;;
[0-9]*) msgid=`echo $f | awk '{print $1;}'`
echo $msgid >> $MSGFILE;;
*) echo "Bad response to LIST command ($f)" >&2; exit 1;;
esac;;
6) case "$f" in
+OK*) STATE=7;;
*) echo "Bad response to TOP command ($f)" >&2; exit 1;;
esac;;
7) case "$f" in
.*) echo "---"; reqmsg; STATE=6;;
From:*) echo $f;;
Subject:*) echo $f;;
esac;;
*) echo STATE $STATE and got $f;;
esac
done
Solution using modern bash.
#!/bin/bash
#
#
STATE=1
USER=myname
PASS=mypass
HOST=mail.example.com
PORT=pop3
declare -A MSGIDS
declare -i NUMID
NUMID=0
declare -i CURID
CURID=0
coproc telnet $HOST $PORT
reqmsg()
{
if [ $CURID = $NUMID ]; then echo "QUIT" >&${COPROC[1]}; fi
echo "TOP ${MSGIDS[$CURID]}" >&${COPROC[1]}
((CURID++))
}
while read -t 10 f <&${COPROC[0]}
do
case "$STATE" in
1) case "$f" in
+OK*) echo "USER $USER" >&${COPROC[1]}; STATE=2;;
esac;;
2) case "$f" in
+OK*) echo "PASS $PASS" >&${COPROC[1]}; STATE=3;;
*) echo "Bad response to user command ($f)" >&2; exit 1;;
esac;;
3) case "$f" in
+OK*) echo "LIST" >&${COPROC[1]}; STATE=4;;
*) echo "Bad response to password command ($f)" >&2; exit 1;;
esac;;
4) case "$f" in
+OK*) STATE=5;;
*) echo "Bad response to LIST command ($f)" >&2; exit 1;;
esac;;
5) case "$f" in
.*) reqmsg; STATE=6;;
[0-9]*) read msgid size < <(echo $f)
MSGIDS[$NUMID]=$msgid
((NUMID++));;
*) echo "Bad response to LIST command ($f)" >&2; exit 1;;
esac;;
6) case "$f" in
+OK*) STATE=7;;
*) echo "Bad response to TOP command ($f)" >&2; exit 1;;
esac;;
7) case "$f" in
.*) echo "---"; reqmsg; STATE=6;;
From:*) echo $f;;
Subject:*) echo $f;;
esac;;
*) echo STATE $STATE and got $f;;
esac
done

I just tested these scripts on Linux Mint Quiana and also Scientific Linux, both still work fine with a slight tweak. As in the earlier comment TOP on my server appears to need 2 arguments but as you are only looking at the mail headers just add a space and 0 to the end of the TOP command (0 lists only the mail headers) ie
(first script)
echo "TOP $MSGID 0" >>$POPFILE
or
(second script)
echo "TOP ${MSGIDS[$CURID]} 0" >&${COPROC[1]}
I also needed to change "read -t 10 f" to "read -t 50 f" as my POP3 server seems quite slow.
Scientific Linux was happy with the invocation of the "sh" shell however Mint needed the references to "sh" changed to "bash" then all was well
Finally to avoid leaving your POP3 password lying around in a script file it would be better to prompt for it on running the script:
ie
echo "enter password for this POP3 email connecton"
read password
PASS=$password

Related

Bash or Python efficient substring matching and filtering

I have a set of filenames in a directory, some of which are likely to have identical substrings but not known in advance. This is a sorting exercise. I want to move the files with the maximum substring ordered letter match together in a subdirectory named with that number of letters and progress to the minimum match until no matches of 2 or more letters remain. Ignore extensions. Case insensitive. Ignore special characters.
Example.
AfricanElephant.jpg
elephant.jpg
grant.png
ant.png
el_gordo.tif
snowbell.png
Starting from maximum length matches to minimum length matches will result in:
./8/AfricanElephant.jpg and ./8/elephant.jpg
./3/grant.png and ./3/ant.png
./2/snowbell.png and ./2/el_gordo.tif
Completely lost on an efficient bash or python way to do what seems a complex sort.
I found some awk code which is almost there:
{
count=0
while ( match($0,/elephant/) ) {
count++
$0=substr($0,RSTART+1)
}
print count
}
where temp.txt contains a list of the files and is invoked as eg
awk -f test_match.awk temp.txt
Drawback is that a) this is hardwired to look for "elephant" as a string (I don't know how to make it take an input string (rather than file) and an input test string to count against, and
b) I really just want to call a bash function to do the sort as specified
If I had this I could wrap some bash script around this core awk to make it work.
function longest_common_substrings () {
shopt -s nocasematch
for file1 in * ; do for file in * ; do \
if [[ -f "$file1" ]]; then
if [[ -f "$file" ]]; then
base1=$(basename "$file" | cut -d. -f1)
base2=$(basename "$file1" | cut -d. -f1)
if [[ "$file" == "$file1" ]]; then
echo -n ""
else
echo -n "$file $file1 " ; $HOME/Scripts/longest_common_substring.sh "$base1" "$base2" | tr -d '\n' | wc -c | awk '{$1=$1;print}' ;
fi
fi
fi
done ;
done | sort -r -k3 | awk '{ print $1, $3 }' > /tmp/filesort_substring.txt
while IFS= read -r line; do \
file_to_move=$(echo "$line" | awk '{ print $1 }') ;
directory_to_move_to=$(echo "$line" | awk '{ print $2 }') ;
if [[ -f "$file_to_move" ]]; then
mkdir -p "$directory_to_move_to"
\gmv -b "$file_to_move" "$directory_to_move_to"
fi
done < /tmp/filesort_substring.txt
shopt -u nocasematch
where $HOME/Scripts/longest_common_substring.sh is
#!/bin/bash
shopt -s nocasematch
if ((${#1}>${#2})); then
long=$1 short=$2
else
long=$2 short=$1
fi
lshort=${#short}
score=0
for ((i=0;i<lshort-score;++i)); do
for ((l=score+1;l<=lshort-i;++l)); do
sub=${short:i:l}
[[ $long != *$sub* ]] && break
subfound=$sub score=$l
done
done
if ((score)); then
echo "$subfound"
fi
shopt -u nocasematch
Kudos to the original solution for computing the match in the script which I found elsewhere in this site

jboss-fuse-6.3.0.redhat-187 Fabric ssh script Error - Command not found: function

Created a Fabric Root
started ./fuse and then executed bellow command
fabric:create --wait-for-provisioning --verbose --clean --new-user admin --new-user-role admin --new-user-password admin --zookeeper-password zoopassword --resolver manualip --manual-ip 127.0.0.1
Started another fuse server ./fuse with ssh listening on 8102
Executed bellow command in the root console(fuse running at step 1 as root)
fabric:container-create-ssh --host 127.0.0.1 --user admin --password admin --port 8102 --new-user admin --new-user-password admin --resolver manualip --manual-ip 127.0.0.1 mqgateway
Then getting this Error :
--- command ---
#!/bin/bash function run { echo "Running: $*" ; $* ; rc=$? ; if [ "${rc}" -ne 0 ]; then echo "Command Failed:Error running installation script: $*" ; exit ${rc} ; fi ; }
function sudo_n { SUDO_NON_INTERACTIVE=`sudo -h | grep "\-n"` if [
-z "$SUDO_NON_INTERACTIVE" ]; then
sudo $* else
sudo -n $* fi }
function download { echo "Downloading: $1"; ret=`curl -C - --retry 10 --write-out %{http_code} --silent --output $2 $1`; if [ "${ret}"
-ne 200 ]; then
echo "Download failed with code: ${ret}";
rm $2; fi; }
function maven_download { echo "Downloading Maven Artifact with groupId: $2 artifactId: $3 and version: $4 from repository: $1"; export REPO=$1 export GROUP_ID=$2 export ARTIFACT_ID=$3 export VERSION=$4 export TYPE=$5 export TARGET_FILE=$ARTIFACT_ID-$VERSION.$TYPE
export GROUP_ID_PATH=`echo $GROUP_ID | sed 's/\./\//g'`
export ARTIFACT_BASE_URL=`echo $REPO$GROUP_ID_PATH/$ARTIFACT_ID/$VERSION/`
if [[ "$VERSION" == *SNAPSHOT* ]]; then
export ARTIFACT_URL=`curl --location -C - --retry 10 --silent $ARTIFACT_BASE_URL | grep href | grep zip\" | sed 's/^.*<a href="//' | sed 's/".*$//' | tail -1` else
export ARTIFACT_URL=`echo $REPO$GROUP_ID_PATH/$ARTIFACT_ID/$VERSION/$ARTIFACT_ID-$VERSION.$TYPE` fi
if [ -z "$ARTIFACT_URL" ]; then
export ARTIFACT_URL=`echo $REPO$GROUP_ID_PATH/$ARTIFACT_ID/$VERSION/$ARTIFACT_ID-$VERSION.$TYPE` fi
echo "Using URL: $ARTIFACT_URL" ret=`curl --location --write-out %{http_code} --silent --output $TARGET_FILE $ARTIFACT_URL` if [ "${ret}" -ne 200 ]; then
echo "Download failed with code: ${ret}"
rm $TARGET_FILE fi }
function update_pkgs() { if which dpkg &> /dev/null; then
sudo_n apt-get update elif which rpm &> /dev/null; then
sudo_n yum check-update fi }
function install_curl() { echo "Checking if curl is present." if which curl &> /dev/null; then
echo "Curl is already installed." else
echo "Installing curl."
if which dpkg &> /dev/null; then
sudo_n apt-get -y install curl
elif which rpm &> /dev/null; then
sudo_n yum -y install curl
fi fi }
function install_unzip() { echo "Checking if unzip is present." if which unzip &> /dev/null; then
echo "Unzip is already installed." else
echo "Installing unzip."
if which dpkg &> /dev/null; then
sudo_n apt-get -y install unzip
elif which rpm &> /dev/null; then
sudo_n yum -y install unzip
fi fi }
function install_openjdk_deb() { sudo_n apt-get -y install openjdk-7-jdk
# Try to set JAVA_HOME in a number of commonly used locations # Lifting JAVA_HOME detection from jclouds
for CANDIDATE in `ls -d /usr/lib/jvm/java-1.7.0-openjdk-* /usr/lib/jvm/java-7-openjdk-* /usr/lib/jvm/java-7-openjdk 2>&-`; do
if [ -n "$CANDIDATE" -a -x "$CANDIDATE/bin/java" ]; then
export JAVA_HOME=$CANDIDATE
break
fi
done
if [ -f /etc/profile ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> /etc/profile" fi if [ -f /etc/bashrc ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> /etc/bashrc" fi if [ -f ~root/.bashrc ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> ~root/.bashrc" fi if [ -f /etc/skel/.bashrc ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> /etc/skel/.bashrc" fi if [ -f "$DEFAULT_HOME/$NEW_USER" ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> $DEFAULT_HOME/$NEW_USER" fi
sudo_n update-alternatives --install /usr/bin/java java $JAVA_HOME/bin/java 17000 sudo_n update-alternatives --set java $JAVA_HOME/bin/java java -version }
function install_openjdk_rpm() { sudo_n yum -y install java-1.7.0-openjdk-devel
# Try to set JAVA_HOME in a number of commonly used locations # Lifting JAVA_HOME detection from jclouds
for CANDIDATE in `ls -d /usr/lib/jvm/java-1.7.0-openjdk-* /usr/lib/jvm/java-7-openjdk-* /usr/lib/jvm/java-7-openjdk 2>&-`; do
if [ -n "$CANDIDATE" -a -x "$CANDIDATE/bin/java" ]; then
export JAVA_HOME=$CANDIDATE
break
fi
done
if [ -f /etc/profile ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> /etc/profile" fi if [ -f /etc/bashrc ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> /etc/bashrc" fi if [ -f ~root/.bashrc ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> ~root/.bashrc" fi if [ -f /etc/skel/.bashrc ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> /etc/skel/.bashrc" fi if [ -f "$DEFAULT_HOME/$NEW_USER" ]; then
sudo_n "echo 'export JAVA_HOME=$JAVA_HOME' >> $DEFAULT_HOME/$NEW_USER" fi
sudo_n alternatives --install /usr/bin/java java $JAVA_HOME/bin/java 17000 sudo_n alternatives --set java $JAVA_HOME/bin/java java
-version }
function install_openjdk() {
echo "Checking if java is present."
ARCH=`uname -m`
JAVA_VERSION=`java -version 2>&1`
if [[ $JAVA_VERSION == *1.7* ]]; then
echo "Java is already installed."
else
echo "Installing java."
if which dpkg &> /dev/null; then
install_openjdk_deb
elif which rpm &> /dev/null; then
install_openjdk_rpm
fi
fi }
function validate_requirements() { if ! which curl &> /dev/null; then
echo "Command Failed:Curl is not installed."; fi if ! which java &> /dev/null; then
echo "Command Failed:Java is not installed.";
exit -1; else
check_java_version fi }
function check_java_version() { JAVA_VERSION=`java -version 2>&1 | grep "[java|openjdk] version" | awk '{print $3}' | tr -d \" | awk '{split($0, array, ".")} END{print array[2]}'` if [ $JAVA_VERSION
-ge 6 ]; then
echo "Java version is greater than 1.6." else
echo "Command Failed:Unsupported java version: 1.$JAVA_VERSION.x found."
exit -1; fi }
function exit_if_not_exists() { if [ ! -f $1 ]; then
echo "Command Failed:Could not find file $1";
exit -1; fi local zipFile="$1" local size="$(du $zipFile | awk '{ print $1}')" if [ $size -lt 100 ]; then
echo "Command Failed: Zip archive is empty. Check $1";
exit -1; fi
}
function copy_node_metadata() { echo "Copying metadata for container: $1"; TARGET_PATH="./fabric/import/fabric/registry/containers/config/$1/" mkdir -p $TARGET_PATH ENCODED_METADATA=$2 echo $ENCODED_METADATA > ./fabric/import/fabric/registry/containers/config/$1/metadata.cfg }
function karaf_check() { KARAF_HOME=$1 INSTANCES_FILE=$KARAF_HOME/instances/instance.properties for i in {1..5};
do
if [ ! -f $INSTANCES_FILE ]; then
sleep 1
else
break
fi
done if [ -f $INSTANCES_FILE ]; then
for j in {1..5};
do
PID=`cat $INSTANCES_FILE | grep "item.0.pid" | awk -F "=" '{print $2}'`
if [ "$PID" = "" ]; then
sleep 1
else
break
fi
done
if ps -p $PID > /dev/null; then
echo "Fabric is started successfully"
else
echo "Command Failed: Karaf process ($PID) is not running"
fi else
echo "Command Failed:Could not find Karaf instance.properties" fi }
function replace_in_file { sed "s/$1/$2/g" $3 > $3.tmp rm $3 mv $3.tmp $3 }
function replace_property_value { echo "Setting value $2 for key $1 in $3" sed "s/$1[ \t]*=.*/$1 = $2/g" $3 > $3.tmp rm $3 mv $3.tmp $3 }
function configure_hostnames() { CLOUD_PROVIDER=$1 case $CLOUD_PROVIDER in
openstack-nova | ec2 | aws-ec2 )
echo "Resolving public hostname for ec2 node"
export PUBLIC_HOSTNAME=`curl http://169.254.169.254/latest/meta-data/public-hostname | sed 's/ /_/g'`
echo PUBLIC_HOSTNAME
;;
cloudservers | cloudservers-uk | cloudservers-us )
echo "Resovling public hostname for rackspace node"
PRIVATE_IP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
export PUBLIC_HOSTNAME=`echo $PRIVATE_IP | tr . -`.static.cloud-ips.com
;; esac if [ ! -z ${PUBLIC_HOSTNAME} ]; then
LOOKUP_ADDRESS=`nslookup $PUBLIC_HOSTNAME > /dev/null | grep Address | tail -n 1 | cut -d " " -f 3 | sed 's/ /_/g'`
echo "Found hostname: $PUBLIC_HOSTNAME matching with address: $LOOKUP_ADDRESS"
echo "publichostname=$PUBLIC_HOSTNAME" >> etc/system.properties
cat etc/system.properties | grep -v 'local.resolver=' | grep -v 'global.resolver=' > etc/system.properties.tmp
mv etc/system.properties.tmp etc/system.properties
echo "local.resolver=publichostname" >> etc/system.properties
echo "global.resolver=publichostname" >> etc/system.properties
echo $PUBLIC_HOSTNAME > hostname
sudo_n cp hostname /etc/
export JAVA_OPTS="-Djava.rmi.server.hostname=$PUBLIC_HOSTNAME $JAVA_OPTS"
echo "RESOLVER OVERRIDE:publichostname" fi }
function find_free_port() { START_PORT=$1 END_PORT=$2 for port in `eval echo {$START_PORT..$END_PORT}`;do
if [[ $OSTYPE == darwin* ]]; then
# macosx has a different syntax for netstat
netstat -atp tcp | tr -s ' ' ' '| cut -d ' ' -f 4 | grep ":$port" > /dev/null 2>&1 && continue || echo $port && break;
else
netstat -utan | tr -s ' ' ' '| cut -d ' ' -f 4 | grep ":$port" > /dev/null 2>&1 && continue || echo $port && break;
fi done }
function wait_for_port() {
PORT=$1
for i in {1..5};
do
if [[ $OSTYPE == darwin* ]]; then
# macosx has a different syntax for netstat
netstat -an -ptcp | grep LISTEN | tr -s ' ' ' '| cut -d ' ' -f 4 | grep ":$PORT" > /dev/null 2>&1 && break;
else
netstat -lnt | tr -s ' ' ' '| cut -d ' ' -f 4 | grep ":$PORT" > /dev/null 2>&1 && break;
fi
sleep 5;
done
return 0 }
function extract_zip { if ! which unzip &> /dev/null; then
jar xf $1 else
unzip -o $1 fi }
function generate_ssh_keys { if [ ! -f ~/.ssh/id_rsa ]; then
mkdir -p ~/.ssh
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa fi }
run mkdir -p ~/containers/ run cd ~/containers/ run mkdir -p mqgateway run cd mqgateway validate_requirements cp /tmp/fabric8-karaf-1.2.0.redhat-630187.zip fabric8-karaf-1.2.0.redhat-630187.zip if ! jar xf fabric8-karaf-1.2.0.redhat-630187.zip &> /dev/null; then rm fabric8-karaf-1.2.0.redhat-630187.zip ; fi if [ ! -f fabric8-karaf-1.2.0.redhat-630187.zip ] && [ ! -s fabric8-karaf-1.2.0.redhat-630187.zip ] ; then maven_download http://127.0.0.1:8181/maven/download/ io.fabric8 fabric8-karaf
1.2.0.redhat-630187 zip exit_if_not_exists fabric8-karaf-1.2.0.redhat-630187.zip run extract_zip fabric8-karaf-1.2.0.redhat-630187.zip run cd `ls -l | grep fabric8-karaf | grep ^d | awk '{ print $NF }' | sort -n | head -1` run mkdir -p system/io/fabric8/fabric8-karaf/1.2.0.redhat-630187 run cp ../fabric8-karaf-1.2.0.redhat-630187.zip system/io/fabric8/fabric8-karaf/1.2.0.redhat-630187/ run rm ../fabric8-karaf-1.2.0.redhat-630187.zip run chmod +x bin/* cat >> etc/system.properties <<'END_OF_FILE' global.resolver=localhostname END_OF_FILE replace_property_value "karaf.name" "mqgateway" etc/system.properties replace_property_value "importDir" "fabric" etc/io.fabric8.datastore.cfg replace_property_value "felix.fileinstall.filename" "file:\/C:\/Fabric\/root\/etc\/io.fabric8.datastore.cfg" etc/io.fabric8.datastore.cfg replace_property_value "component.name" "io.fabric8.datastore" etc/io.fabric8.datastore.cfg replace_property_value "gitRemotePollInterval" "60000" etc/io.fabric8.datastore.cfg replace_property_value "service.pid" "io.fabric8.datastore" etc/io.fabric8.datastore.cfg BIND_ADDRESS=0.0.0.0 SSH_PORT="`find_free_port 8101 65535`" RMI_REGISTRY_PORT="`find_free_port 1099 65535`" RMI_SERVER_PORT="`find_free_port 44444 65535`" JMX_SERVER_URL="service:jmx:rmi:\/\/${BIND_ADDRESS}:${RMI_SERVER_PORT}\/jndi\/rmi:\/\/${BIND_ADDRESS}:${RMI_REGISTRY_PORT}\/karaf-mqgateway" HTTP_PORT="`find_free_port 8181 65535`" replace_property_value "sshPort" "$SSH_PORT" etc/org.apache.karaf.shell.cfg replace_property_value "sshHost" "$BIND_ADDRESS" etc/org.apache.karaf.shell.cfg replace_property_value "rmiRegistryPort" "$RMI_REGISTRY_PORT" etc/org.apache.karaf.management.cfg replace_property_value "rmiServerPort" "$RMI_SERVER_PORT" etc/org.apache.karaf.management.cfg replace_property_value "rmiServerHost" "$BIND_ADDRESS" etc/org.apache.karaf.management.cfg replace_property_value "rmiRegistryHost" "$BIND_ADDRESS" etc/org.apache.karaf.management.cfg replace_property_value "org.osgi.service.http.port" "$HTTP_PORT" etc/org.ops4j.pax.web.cfg replace_in_file "8181" "$HTTP_PORT" etc/jetty.xml cat >> etc/system.properties <<'END_OF_FILE' minimum.port=0 END_OF_FILE cat >> etc/system.properties <<'END_OF_FILE' maximum.port=65535 END_OF_FILE cat >> etc/system.properties <<'END_OF_FILE'
END_OF_FILE cat >> etc/system.properties <<'END_OF_FILE' preferred.network.address=127.0.0.1 END_OF_FILE cat >> etc/system.properties <<'END_OF_FILE' zookeeper.url = 127.0.0.1:2181 END_OF_FILE cat >> etc/system.properties <<'END_OF_FILE' zookeeper.password = ZKENC=em9vcGFzc3dvcmQ= END_OF_FILE cat >> etc/system.properties <<'END_OF_FILE' zookeeper.password.encode = true END_OF_FILE cat >> etc/system.properties <<'END_OF_FILE' agent.auto.start=true END_OF_FILE sed 's/featuresBoot=/&fabric-agent,fabric-git,/' etc/org.apache.karaf.features.cfg > etc/org.apache.karaf.features.cfg.tmp mv etc/org.apache.karaf.features.cfg.tmp etc/org.apache.karaf.features.cfg sed 's/repositories=/&http:\/\/127.0.0.1:8181\/maven\/download\/,/' etc/org.ops4j.pax.url.mvn.cfg > etc/org.ops4j.pax.url.mvn.cfg.tmp mv etc/org.ops4j.pax.url.mvn.cfg.tmp etc/org.ops4j.pax.url.mvn.cfg generate_ssh_keys configure_hostnames none cat > bin/setenv <<'END_OF_FILE' export JAVA_OPTS=" -XX:+UnlockDiagnosticVMOptions
-XX:+UnsyncloadClass -server"
END_OF_FILE nohup bin/start & karaf_check `pwd` wait_for_port $SSH_PORT wait_for_port $RMI_REGISTRY_PORT
--- output --- Command not found: function
--- error ---
------
SSH containers should be created on Remote machines.An SSH container is just a Fabric container that is running on a remote host on your local network,
where that host is accessible through the SSH protocol. This section describes some basic administration tasks for these SSH containers.
Please refer https://access.redhat.com/documentation/en-us/red_hat_jboss_fuse/6.3/html/fabric_guide/chapter-fabric_container#ContSSH
If you want to create containers on the same machine (local host) create child containers
https://access.redhat.com/documentation/en-us/red_hat_jboss_fuse/6.3/html/fabric_guide/chapter-fabric_container#ContChild
Creating ssh container
fabric:container-create-ssh --host remotehost --user user1 --password pass1 --jvm-opts="-Djava.rmi.server.hostname=remotehost" --profile fabric fabric-eu03

Unable to pass variable from shell script to perl script

I have a shell script which passes the some variables to perl script, named Deploy.pl. But it seems perl script is not picking the variable. I have been trying to find out the cause but unable to resolve it. Same variables are getting passed to perl script properly except the $entname variable. Same varibale i am using for my copy statement,but as it is not getting picked up by perl script i am getting an cannot find path error. Please have a look at both shell script and perl script. I know it's insane to put such a long script,but i want to give clear idea about what is happening with the script.
Shell Script:
#!/bin/bash
sleep 1
echo "##### Please Read the following information carefully ####"
sleep 2
echo "Please read this preamble in order to run the script. It states the adamant requirement that user needs to have while executing the script."
echo " "
echo "1. The script requires the user name(i.e. TIBID ) which should have SVN access in order to execute it successfully. Example: ./deploy.sh tib7826"
echo " "
echo "where tib7826 is the user who has SVN access. Make sure the tibid you are using should have full SVN access."
echo " "
echo "2. The script further requires the Internal name as input. MDM creates a directory in the MQ_COMMON_DIR with internal name.It is"
echo " "
echo "case-sensitive and should be exact as what it is there in MQ_COMMON_DIR."
echo " "
echo "3. Further it asks for envoirnment name. The Environment name should be like DEV1,DEV2,DEV3,TEST1,TEST2 etc.Make sure they too are case specific."
echo "Otherwise it will fail to execute further steps."
echo " "
echo " 4. The script requires CATALOG ID's as a input for the below 4 repositories"
echo " "
echo " a.ITEM_MASTER"
echo " "
echo " b.DISTRIBUTION_FACILITY_LV"
echo " "
echo " c.MANAGEMENT_DIVISION_SOI"
echo " "
echo " d.ALTERNATE IDENTIFICATIONS"
echo " "
echo "You will get those ID's from MDM Web UI. Login to the MDM UI. Go to Item Data==>Repositories==>ID Column."
echo " "
echo "5. For more detail read the Readme.txt in order to execute this script.Take it from the location"
echo " "
echo "/tibco/data/GRISSOM2/build_deploy_scripts_kroger/document"
echo " "
echo " Or else take the ReadMe form SVN."
echo " "
echo "If you agree to execute the script press Y else N."
read uinput
if [ $uinput == 'Y' ]; then
echo "Script will execute!!"
sleep 3
else
echo "You have Cancel the Agreement"
exit
fi
# sample command to execute the deploy script ./deploy.sh tib7777
# export the build root
export BUILD_ROOT=/tibco/data/GRISSOM2
# CUSTOM env variables are temporary and set directly in the script to execute custom tasks
export CUSTOM1=/tibco/data/GRISSOM2/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/rulebase
cd $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common
echo "--- - - - - - - - - - - - - - - "
echo "Enter your Enterprise INTERNAL NAME:"
sleep 1
read internal_name
sleep 2
echo "Enter Enterprise Name"
read entname
#code to check if the Enterprise with the correct INTERNAL name exists
if [ -d "$MQ_COMMON_DIR/$internal_name" ]; then
echo "Artifacts for the $internal_name will be deployed"
else
echo "THE ENTERPRISE with the $internal_name doesn't seems to be correct INTERNAL NAME. Execute the script again with the correct INTERNAL NAME"
exit
fi
#This snippet will cleanup the existing MDR_ITME_E1 before we get the latest code for MDR_ITME_E1 enterprise from SVN
cd $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common
if [ -d "$entname" ]; then
rm -rf $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common/$entname
echo "Removing existing $entname from SVN source directory.."
echo "..."
sleep 1
echo "...."
sleep 1
echo "....."
sleep 1
else
echo "$entname Doesn't Exist for the first time"
fi
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
echo "Retrieving Latest Code from SVN..."
sleep 2
echo "Please wait......"
echo "Connecting to SVN."
sleep 1
echo "Connecting to SVN.."
sleep 1
echo "Connecting to SVN..."
sleep 1
echo "Connecting to SVN...."
sleep 1
echo "Connecting to SVN....."
sleep 1
echo "Connecting to SVN......"
sleep 1
echo "Connecting to SVN......."
sleep 1
echo "Connecting to SVN........"
echo "Do you want to checkout the latest version of the COMMON DIR code [Y] or [N]"
read svninput
if [ $svninput == 'Y' ]; then
echo "Downloading SVN Code"
if [ $entname == 'MDR_ITEM_E1' ]; then
echo svn co --username $1 http://svn.kroger.com/repos/mercury/tibcomdm/cim_paris/branches/Grissom2_Development/common/MDR_ITEM_E1
svn co --username $1 http://svn.kroger.com/repos/mercury/tibcomdm/cim_paris/branches/Grissom2_Development/common/MDR_ITEM_E1
sleep 3
else
echo "Copying E2 code"
echo svn co --username $1 http://svn.kroger.com/repos/mercury/tibcomdm/cim_paris/branches/Grissom2_breakfix/common/MDR_ITEM_E2
svn co --username $1 http://svn.kroger.com/repos/mercury/tibcomdm/cim_paris/branches/Grissom2_breakfix/common/MDR_ITEM_E2
fi
else
echo "Enter the revision number of the common directory"
read revision
if [ $entname == 'MDR_ITEM_E1' ]; then
svn co --username $1 -r $revision http://svn.kroger.com/repos/mercury/tibcomdm/cim_paris/branches/Grissom2_Development/common/MDR_ITEM_E1
else
echo "E2 Code"
svn co --username $1 -r $revision http://svn.kroger.com/repos/mercury/tibcomdm/cim_paris/branches/Grissom2_breakfix/common/MDR_ITEM_E2
fi
echo "Loaded code for Enterprise"
fi
if [ -d $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common/$entname ] ; then
echo "Downloaded latest code from SVN!!"
else
echo "CODE has not been downloaded. Please check your credentials."
exit
fi
#echo svn co --username $1 http://svn.kroger.com/repos/mercury/tibcomdm/cim_paris/branches/Grissom2_Development/common/MDR_ITEM_E1
#svn co --username $1 http://svn.kroger.com/repos/mercury/tibcomdm/cim_paris/branches/Grissom2_Development/common/MDR_ITEM_E1
echo "========================================"
echo "Taking destination organization backup...wait"
cd $MQ_COMMON_DIR/$internal_name
chmod -Rf 777 $MQ_COMMON_DIR/$internal_name
sleep 2
cp -rf /$MQ_COMMON_DIR/$internal_name /$MQ_COMMON_DIR/$internal_name$( date +%d%m%Y%H%M )
echo "backup done!!"
chmod -Rf 775 $MQ_COMMON_DIR/$internal_name *
echo "========================================"
#Removing contents inside the workflow,forms,maps,rules,rulebase,schema,templates,inputmap
sleep 2
echo "Removing contents inside workflow,inputmap,rules......"
echo "."
sleep 1
echo ".."
sleep 1
echo "..."
sleep 1
if [ -d "$MQ_COMMON_DIR/$internal_name" ]; then
# cleanup the enterprise internal directories
rm -rf $MQ_COMMON_DIR/$internal_name/workflow/*
rm -rf $MQ_COMMON_DIR/$internal_name/forms/*
rm -rf $MQ_COMMON_DIR/$internal_name/rulebase/*
rm -rf $MQ_COMMON_DIR/$internal_name/maps/*
rm -rf $MQ_COMMON_DIR/$internal_name/templates/*
else
echo "THE ENTERPRISE with the $internal_name internal name does not exist. Execute the script with the correct INTERNAL NAME"
exit
fi
sleep 2
echo "The following folders[workflow, forms, rulebase, maps, templates] have been cleaned up in the Enterprise common directory"
cd $MQ_COMMON_DIR/$internal_name
echo "Inside internal enterprise"
echo "-------------"
echo "InputMap,Schema,Scheduler,Distributedlock...Creating!!"
sleep 2
if [ -d "inputmap" ] && [ -d "schema" ] && [ -d "scheduler" ] && [ -d "distributedlock" ]; then
echo "Copying the directory structure"
echo "inputmap, schema,scheduler,distributedlock exists!!"
else
mkdir inputmap
mkdir schema
mkdir scheduler
mkdir distributedlock
chmod 775 *.*
sleep 1
echo "Required additional directories have been created!"
fi
#Enter Environment Name:
echo "Options: Which Enviroment you want to Deploy 1.DEV1 2.DEV2 3.DEV3 4.TEST1 5.TEST2 6.E2E 7.STAGE 8.PRODUCTION"
echo "Enter Environment Name:"
read env_name
if [ $env_name == DEV1 -o $env_name == DEV2 -o $env_name == DEV3 -o $env_name == TEST1 -o $env_name == TEST2 -o $env_name == E2E -o $env_name == STAGE -o $env_name == PRODUCTION ] ; then
echo "Running"
else
echo "You Entered wrong Environment Name!! Enter correct environment name and run the script again."
exit
fi
#Input catalog ID's==specific to E1 enterprise code only
if [ $entname == 'MDR_ITEM_E1' ]; then
echo "Enter Catalog ID's to copy the CV and Catalogvalidation files"
echo "Enter Catalog ID For ITEM_MASTER"
read item
if [ -d "$MQ_COMMON_DIR/$internal_name/catalog/master/$item" ]; then
echo "renaming existing catalogvalidation.xml as a backup copy"
cd $MQ_COMMON_DIR/$internal_name/catalog/master/$item
mv catalogvalidation.xml catalogvalidation.xml$( date +%d%m%Y%H%M )
else
echo "Either directory or file does not exist"
fi
echo "Enter Catalog ID For DISTRIBUTION_FACILITY_LV"
read dflv
if [ -d "$MQ_COMMON_DIR/$internal_name/catalog/master/$dflv" ]; then
echo "renaming existing catalogvalidation.xml as a backup copy"
cd $MQ_COMMON_DIR/$internal_name/catalog/master/$dflv
mv catalogvalidation.xml catalogvalidation.xml$( date +%d%m%Y%H%M )
else
echo "Either directory or file does not exist"
fi
echo "Enter Catalog ID For MANAGEMENT_DIVISION_SOI"
read mds
if [ -d "$MQ_COMMON_DIR/$internal_name/catalog/master/$mds" ]; then
echo "renaming existing catalogvalidation.xml as a backup copy"
cd $MQ_COMMON_DIR/$internal_name/catalog/master/$mds
mv catalogvalidation.xml catalogvalidation.xml$( date +%d%m%Y%H%M )
else
echo "Either directory or file does not exist"
fi
echo "Enter Catalog ID For ALTERNATE_IDENTIFICATION_MVL"
read aim
if [ -d "$MQ_COMMON_DIR/$internal_name/catalog/master/$aim" ]; then
echo "renaming existing catalogvalidation.xml as a backup copy"
cd $MQ_COMMON_DIR/$internal_name/catalog/master/$aim
mv catalogvalidation.xml catalogvalidation.xml$( date +%d%m%Y%H%M )
else
echo "Either directory or file does not exist"
fi
echo "Copying CV Files"
cp -rf $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/catalog/master/34731_ITEM_MASTER/cv_* $MQ_COMMON_DIR/$internal_name/rulebase/
cp -rf $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/catalog/master/34800_DISTRIBUTION_FACILITY_LV/cv_* $MQ_COMMON_DIR/$internal_name/rulebase/
cp -rf $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/catalog/master/34800_DISTRIBUTION_FACILITY_LV/DISTRIBUTION_FACILITY_LV.xml $MQ_COMMON_DIR/$internal_name/rulebase/
cp -rf $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/catalog/master/34801_MANAGEMENT_DIVISION_SOI/cv_* $MQ_COMMON_DIR/$internal_name/rulebase/
#cp -rf $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/catalog/master/ALTERNATE_IDENTIFICATION_MVL/cv_* $MQ_COMMON_DIR/$internal_name/rulebase/
sleep 3
echo "....."
sleep 1
echo "......."
sleep 1
echo "........."
echo "Copied CV files"
#Copying E2 Specific Code--Customized Files
else
#Copy E2 files
sleep 3
echo "Running the Deploy.pl..."
sleep 4
fi
# run the deploy script
cd $BUILD_ROOT/build_deploy_scripts_kroger/deploy_script
./Deploy.pl $env_name $item $dflv $mds $aim MDR_ITEM_E2 $internal_name
# custom code changes
# custom1 to change the rulebase URLs
echo " "
echo " "
echo "********************"
echo "========================================"
if [ $entname == 'MDR_ITEM_E1' ]; then
echo "Copying schema for $internal_name internal enterprise name"
if [ $env_name == DEV3 -o $env_name == TEST2 -o $env_name == DEV2 ]; then
echo "Copying $env_name schema"
cd /tibco/mdm/8.3/common/$internal_name/schema/
rm *.*
cp /tibco/data/GRISSOM2/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/schema/TEST2/* /tibco/mdm/8.3/common/$internal_name/schema/
else
if [ $env_name == E2E ]; then
echo "Copying schema for $env_name environment!!"
cd /tibco/mdm/8.3/common/MDRITME1/schema/
rm *.*
cp /tibco/data/GRISSOM2/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/schema/E2E/* /tibco/mdm/8.3/common/$internal_name/schema/
else
echo "Incorrect environment name"
exit
fi
fi
echo "========================================="
else
echo "E2 code is deploying..."
fi
if [ $entname == 'MDR_ITEM_E1' ]; then
echo "Do you want to copy DropZone press Y to continue else N"
read dr
if [ "$dr" == 'Y' ]; then
echo "Copying DropZone"
cp -rf /tibco/data/GRISSOM2/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/DropZone/* $MQ_COMMON_DIR/$internal_name/DropZone/
echo "Copied DropZone"
sleep 1
else
echo "either folder doesn't exist in $internal_name or You have cancelled the copy opeeation for DropZone"
fi
echo "Do you want to copy EAI press Y to continue else N"
read eai
if [ "$eai" == 'Y' ]; then
echo "Copying EAI"
cp -rf /tibco/data/GRISSOM2/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/EAI/* $MQ_COMMON_DIR/$internal_name/EAI/
echo "Copyied EAI"
sleep 1
else
echo "either folder doesn't exist in $internal_name or You have cancelled the copy opeeation for DropZone"
fi
else
echo "#$%#$%#$%#$%#$%&*^&*##$"
fi
cd $MQ_COMMON_DIR/$internal_name
echo "****** The following directories have been deployed to your Enterprise Internal directory ********"
echo " "
echo "======================================"
ls | tee -a
echo "======================================="
#change the permissions back to standard on the internal directory
#chmod -Rf 775 $MQ_COMMON_DIR/$internal_name
cd $MQ_COMMON_DIR/$internal_name
chmod -Rf 644 *
cd $MQ_COMMON_DIR/$internal_name
find . -type d -exec chmod 0755 {} \;
cd $MQ_COMMON_DIR/$internal_name
chmod -Rf 777 EAI
chmod -Rf 777 DropZone
chmod -Rf 777 distributedlock
echo "Permissions changed!"
echo "========================================"
echo " "
echo " "
echo " "
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
echo "Deployed resources successfully"
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
echo " "
echo " "
exit
Perl script:
#!/usr/bin/perl
use CIMDeploymentVaribles;
&main;
sub main()
{
print "\n Deployment Script \n\n\n";
#print "Options: Which Enviroment you want to Deploy\n 1.DEV1\n 2.DEV2\n 3.TEST1\n 4.TEST2\n 5.STAGE\n 6.PRODUCTION \n\n";
$dep_env = $ARGV[0];
$item_master = $ARGV[1];
$distribution_facility_lv = $ARGV[2];
$management_division_soi = $ARGV[3];
$altername_identification_mvl = $ARGV[4];
$entname = $ARGV[5];
$internal_name = $ARGV[6];
$SVN_COMMON_DIR_LOCATION = "/tibco/data/GRISSOM2/DEPLOYMENT_ARTIFACTS";
$SCRIPT_LOCATION = "$SVN_COMMON_DIR_LOCATION/build_deploy_scripts_kroger/deploy_script";
if ($dep_env eq 'DEV1' || $dep_env eq 'DEV2'|| $dep_env eq 'TEST1' || $dep_env eq 'TEST2' || $dep_env eq 'STAGE'|| $dep_env eq 'PRODUCTION' || $dep_env eq 'LOCALDEV1' || $dep_env eq 'MAHANADI'|| $dep_env eq 'DEV3' || $dep_env eq 'E2E')
{
print "\n Deployment on Environment:: $dep_env\n";
&Set_Environment_Variables($dep_env);
&display_variables($dep_env);
&Deploy_Common_dir_artifacts($dep_env);
}
else
{
print "\nWrong argument is passed\n";
print " \n Provide valid argument: DEV1 or DEV2 or TEST1 or TEST2 or STAGE or PRODUCTION\n\n";
exit;
}
}
sub display_variables()
{
print "\n Displaying Variables Start\n";
print "\n MQ_HOME on $_[0] :: $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}\n";
print "\n MQ_COMMON_DIR on $_[0] :: $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}\n";
print "\n ENTERPRISE_INTERNAL_NAME in $_[0] :: $ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}\n";
print "\n SCRIPT_LOCATION in $SCRIPT_LOCATION\n";
print "\n SVN_COMMON_DIR_LOCATION in $SVN_COMMON_DIR_LOCATION\n";
print "\n Displaying Variables Ended \n";
}
sub Set_Environment_Variables()
{
print "\n Setting up environment Variables\n";
$ENV{"MQ_HOME"}="$ENV_Variables{\"$_[0]\"}{'MQ_HOME'}";
$ENV{"MQ_COMMON_DIR"}="$ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}";
print "\nEnvironment Variables are set\n";
}
sub Deploy_Common_dir_artifacts()
{
print "\n Deploying common dir aftifacts for $_[0] environment \n";
print "\nDeploying common dir artifacts to specific enterprise ( $ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'} ) \n";
print "Command: rm -rf `find $SVN_COMMON_DIR_LOCATION -type d -name .svn`";
system("rm -rf `find $SVN_COMMON_DIR_LOCATION -type d -name .svn`");
# Deploying forms
print "\n 1. Deploying forms \n";
print "\nExecuting::: cp $SVN_COMMON_DIR_LOCATION/common/$entname/forms/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/forms/\n";
system("cp $SVN_COMMON_DIR_LOCATION/common/$entname/forms/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/forms/");
# Deploying maps
print "\n 2. Deploying maps \n";
print "\nExecuting::: cp $SVN_COMMON_DIR_LOCATION/common/$entname/maps/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/maps/ \n";
system("cp $SVN_COMMON_DIR_LOCATION/common/$entname/maps/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/maps/");
# Deploying rulebase
print "\n 3. Deploying rulebase \n";
print "\nExecuting::: cp -r $SVN_COMMON_DIR_LOCATION/common/$entname/rulebase/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/rulebase/\n";
system("cp -r $SVN_COMMON_DIR_LOCATION/common/$entname/rulebase/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/rulebase/");
print "\n\n Executing ::: find $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/rulebase/* -type f -exec sed -i 's/$internal_name/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/' {} \\;";
system("find $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/rulebase/* -type f -exec sed -i 's/$internal_name/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/' {} \\;");
# Deploying workflow
print "\n 4. Deploying workflow \n";
print "\nExecuting::: cp -r $SVN_COMMON_DIR_LOCATION/common/$entname/workflow/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/workflow/\n";
system("cp -r $SVN_COMMON_DIR_LOCATION/common/$entname/workflow/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/workflow/");
print "\n\n Executing ::: find $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/workflow/* -type f -exec sed -i 's/MDR_NEW/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/' {} \\;";
system("find $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/workflow/* -type f -exec sed -i 's/$internal_name/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/' {} \\;");
# Deploying htmlprops
print "\n 6. Deploying htmlprops \n";
# print "\nExecuting::: cp $SVN_COMMON_DIR_LOCATION/common/$entname/htmlprops/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/htmlprops/\n";
#system("cp -rf $SVN_COMMON_DIR_LOCATION/common/$entname/htmlprops/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/htmlprops/");
# Deploying templates
print "\n 7. Deploying Templates \n";
print "\nExecuting::: cp $SVN_COMMON_DIR_LOCATION/common/$entname/templates/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/templates/\n";
system("cp $SVN_COMMON_DIR_LOCATION/common/$entname/templates/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/templates/");
# Deploying Schedular
print "\n 8. Deploying scheduler \n";
print "\nExecuting::: cp -r $SVN_COMMON_DIR_LOCATION/common/$entname/scheduler $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/\n";
#system("cp -r $SVN_COMMON_DIR_LOCATION/common/$entname/scheduler/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/scheduler/");
# Deploying Filewatcher
print "\n 9. Deploying Filewatcher \n";
print "\nExecuting::: cp $SVN_COMMON_DIR_LOCATION/config/FileWatcher.xml $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/config/\n";
system("cp $SVN_COMMON_DIR_LOCATION/config/FileWatcher.xml $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/config/");
# Deploying Custom Properties
# print "\n 5. Deploying Custom Properties \n";
# print "\nExecuting::: cp -r $SVN_COMMON_DIR_LOCATION/custom/* $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/custom/\n";
# system("cp -r $SVN_COMMON_DIR_LOCATION/custom/* $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/custom/");
# Deploying dynservices
print "\n 10. Deploying dynservices \n";
print "\nExecuting::: cp -r $SVN_COMMON_DIR_LOCATION/dynservices $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/\n";
#system("cp -r $SVN_COMMON_DIR_LOCATION/dynservices $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/");
# Deploying InputMap
print "\n 12. Deploying InputMap \n";
print "\nExecuting::: cp -r $SVN_COMMON_DIR_LOCATION/inputmap/* $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/inputmap/\n";
#system("cp -r $SVN_COMMON_DIR_LOCATION/schema/* $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/schema/");
system("cp -r $SVN_COMMON_DIR_LOCATION/common/$entname/inputmap/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/inputmap/");
# Deploying DistributeLock
print "\n 13. Deploying DistributedLock \n";
print "\nExecuting::: cp -r $SVN_COMMON_DIR_LOCATION/distributedlock/* $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/distributedlock/\n";
#system("cp -r $SVN_COMMON_DIR_LOCATION/schema/* $ENV_Variables{\"$_[0]\"}{'MQ_HOME'}/schema/");
system("cp -r $SVN_COMMON_DIR_LOCATION/common/$entname/distributedlock/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/distributedlock/");
}
Failure: print "\nExecuting::: cp $SVN_COMMON_DIR_LOCATION/common/$entname/forms/* $ENV_Variables{\"$_[0]\"}{'MQ_COMMON_DIR'}/$ENV_Variables{\"$_[0]\"}{'ENTERPRISE_INTERNAL_NAME'}/forms/\n";
As $entname is not picked up it's not copying expected files.
You really need to start quoting your scripts propertly:
rm -rf $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common/$entname
Imagine I enter MDR_ITEM_E1 /. The command would now delete all the files on your disk.

how to send input to a daemon in linux

#!/bin/bash
. /etc/init.d/functions
NAME=foo
DIR=/home/amit/Desktop
EXEC=foo.pl
PID_FILE=/var/run/foo.pid
IEXE=/etc/init.d/foo
RUN_AS=root
if [ ! -f $DIR/$EXEC ]
then
echo "$DIR/$EXEC not found."
exit
fi
case "$1" in
start)
echo -n "Starting $NAME"
cd $DIR
/home/amit/Desktop/foo.pl
echo "$NAME are now running."
;;
stop)
echo -n "Stopping $NAME"
kill -TERM `cat $PID_FILE`
rm $PID_FILE
echo "$NAME."
;;
force-reload|restart)
$0 stop
$0 start
;;
submit)
echo $2 >> /tmp/jobs
;;
*)
echo "Use: /etc/init.d/$NAME {start|stop|restart|force-reload}"
exit 1
;;
esac
exit 0
i have created a daemon with start and stop options(service foo start/stop) and it works fine. Now I want to send an input to the dameon. something like "service foo submit [argument]" . I want to to know - if user types "service foo submit alexander" , how alexander can be sent to the running daemon ?
If I get the question right - just as you already use positional var $1 you can supply the rest of the arguments to the command as well, i.e.:
"your_start_up_script" [switch to the script as $1] [arg 2 will be accessible via $2] [arg 3 will be accessible via $3]
Then inside script you do:
case "$1" in
start)
echo -n "Starting $NAME"
cd $DIR
/home/amit/Desktop/foo.pl "$2" "$3"

NetworkManager dispatcher script

scripts in /etc/NetworkManager/dispatcher.d will got exec and parameters will be passed to the scripts by NetworkManager.
One of my laptop BIOS is malfunctioning, I have to manually sync the time, and do system upgrade BTW. I am working with a script to automate this task.
Here's the script:
#!/bin/sh
IF=$1
STATUS=$2
if [ "$STATUS"x != 'up'x -o "$(date +%Y)" -gt "2012" ] ;then
exit
fi
logger "==$0=="
wait_for_process(){
PNAME=$1
PID=`pgrep $PNAME`
while [ -z "$PID" ];do
logger "waiting $1 running for another 3 sec.."
sleep 3;
PID=`pgrep $PNAME`
done
logger "$1 is running!"
}
wait_for_process nm-applet
wait_for_process lxpanel
export DISPLAY=$(echo $DISPLAY | cut -c -2)
if [ -z $DISPLAY ];then
export DISPLAY=:0
fi
#below cmd will yield null string for $user
user=$(who | grep "$DISPLAY" | awk '{print $1}' | tail -n1)
#so I have to hardcode the user name:(
user=xxx
export XAUTHORITY="/home/$user/.Xauthority"
logger "Display $DISPLAY user $user"
su $user -c "xterm -e 'sudo /usr/bin/ntpd -qdg && sudo yaourt -Syua' &" || logger "cannot run xterm"
(the script is invoked before x window, run as root)
user=$(who | grep "$DISPLAY" | awk '{print $1}' | tail -n1) cannot find the login user name. But it works in xterm.
Can someone help?
I am using archlinux i686 + openbox + lxpanel
edit:
I want to find the real login user name, while the script is run by root.
Are you looking for the name of the user running the script? How about:
user=$( id -un )