Quantcast
Channel: Active questions tagged expect - Unix & Linux Stack Exchange
Viewing all articles
Browse latest Browse all 157

How to check whether a given path is a file or directory

$
0
0

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"
}

Viewing all articles
Browse latest Browse all 157

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>