I am using the command below in my expect
script (in tcl/Tk) for checking whether the entered path is an individual file or directory:
set b [exec ./check.sh $file1 | awk -F {=} {{print $1}} ]
The above command invokes check.sh
file. Its contents are:
#!/bin/bash
if [[ -f "$1" ]]
then
echo "File"
else
if [[ -d "$1" ]]
then
echo "Directory"
else
echo "Other"
fi
fi
The command runs fine. The problem occurs when I am using the command in three parallel running scripts(the three scripts are same) it gives me an error
error writing "stdout": bad file number
because the three scripts are invoking the same file at the same time. So, can anyone help me with this?
Here's my script:----
#!/usr/bin/expect
#Set the timeout time for expect command
set timeout 5
#First Argument is Ip Address
set ip [lindex $argv 0]
#Seond Argument is UserName
set user [lindex $argv 1]
#Third Argument is Password
set password [lindex $argv 2]
#Fourth Argument is Path to the source File to be copied (Keeping in mind that this path is concatenated with the second path in the program)
set file1 [lindex $argv 3]
#Fifth Argument is the destination path
set file2 [lindex $argv 4]
#Fetches the epoch time by executing "time" script
set t1 [exec ./time | awk -F {=} {{print $1}} ]
#Checks whether the path to copied is an individual file or a directory
set b [exec ./check.sh $file1 | awk -F {=} {{print $1}} ]
if { $b == "File" } {
puts "It is a file"
#Executes the scp command
spawn bash -c "scp -p $file1 $user@$ip:$file2"
#Sends the password
expect "password:"
send "$password\r";
interact
puts "Number of Files Copied: 1"
}
if { $b == "Directory" } {
puts "It is a directory";
#Executes the scp command
spawn bash -c "scp -r -p $file1 $user@$ip:$file2"
#Sends the password
expect "password:"
send "$password\r";
interact
#For calculating the number of files copied
set c [exec find $file1 -type f | wc -l | awk -F {=} {{print $1}}]
puts "Number of Files Copied: $c\n"
}