Home Man
Search
Today's Posts
Register

If you're not sure where to post a Unix or Linux question, post it here. All unix and Linux beginners welcome in this forum!

How to check if a file is open in editor?

Tags
bash, check, file, open, unix

Login to Reply

 
Thread Tools Search this Thread
# 8  
Old 10-17-2017
Quote:
Originally Posted by cherryTango
For the fuser solution not sure I understand what is meant by the

Any further information would be great! Thank you!
When you open a file using vim it creates a temporary .swp file, hence I included it.

But as Bakunin mentioned, fuser will not cover all file editors since some editors works differently.
# 9  
Old 10-17-2017
Not quite clear what exactly you are doing there; please give more info. Using leafpad to open / edit a file:
Code:
pgrep -xf "leafpad file1"; echo $?
6200
0
pgrep -xf "leafpad file1"; echo $?
1

First is with open file, second after closing it.
# 10  
Old 10-17-2017
So I've got a program that allows the user to edit a file either in gedit or using vim. I want a log to update only once the user has finished editing the file. Figured easiest way to do this would be only to update once the user had closed the editor. Been playing around with it for a while now - think I have found the best solution for what I want to do however I can't seem to get it to work.

My code:
Code:
gedit "$1" & PID="$!"
            # Do stuff while file is open
            wait $PID
            clear
            updateLog

(For the vim option the code is identical except 'vim' replaces 'gedit')

My logic is that this will guarantee that the process is terminated before updating the log.. however in practice it just immediately updates the log. Have absolutely no idea what I'm doing wrong! The $PID variable is being filled correctly as I've tested by printing it. Does the PID for a process change and this is why it's not working? Or is my wait command incorrect? When I put an
Code:
exit

command after the wait there are no errors in the terminal.
# 11  
Old 10-18-2017
Have you tried just wait rather than wait $PID? Or how about not putting it into the background at all:

Code:
gedit "$1"
echo "Editing now finished"

# 12  
Old 10-18-2017
A process ID does not change during the life of a process. But with a clear command in your code, any diagnostics messages that might be printed to give you an indication of what went wrong will likely be erased before you get a chance to see them.

How is it that you expect to edit a file when your editor is running in the background and can't read editing instructions from the terminal?
The Following User Says Thank You to Don Cragun For This Useful Post:
Corona688 (10-18-2017)
# 13  
Old 10-18-2017
Hi again, still struggling with this. All the solutions I see online seem to be working for everyone else but not me! They always return that the process is active initially and then return that it is not - even if the editor is still open. For example:
Code:
gedit "$1" & PID="$!"
            echo "$PID"
            
                me="$(basename $0)($$):"
                if [ -z "$PID" ]
                then
                    echo "$me a PID is required as an argument" >&2
                    exit 2
                fi

                name=$(ps -p $PID -o comm=)
                if [ $? -eq 0 ]
                then
                    echo "$me waiting for PID $PID to finish ($name)"
                    while ps -p $PID > /dev/null; do echo "Running"; sleep 1; done;
                else
                    echo "$me failed to find process with PID $PID" >&2
                    exit 1
                fi
            echo "Finished."

Will return:
Code:
20946
ex_03.sh(20854): waiting for PID 20946 to finish (gedit)
Running
Finished.

Another example is:
Code:
gedit "$1" & PID="$!"
            echo "$PID"
            (while kill -0 $PID; do echo "Running"; sleep 1; done) && echo "Finished."

Will return:
Code:
21078
Running
./ex_03.sh: line 446: kill: (21078) - No such process
Finished.

Finally:
Code:
gedit "$1" & PID="$!"
            echo "$PID"
            echo "Running"
            wait $PID
            echo "Finished."

Will return:
Code:
21190
Running
Finished.

In all cases I have not closed the editor (I don't even have time to before the script stops running). In the final example I attempted to give it some random PID that I just typed in to see if it returned an error message - which it did in several cases and it returned various different error messages - but not from the variable I give it. I am totally running out of ideas here. Is it possible that the PID changes?

---------- Post updated at 04:29 PM ---------- Previous update was at 04:10 PM ----------

Update: Also, when trying this:
Code:
gedit "$1" 
            PID=`ps -ef | grep ${USER} | grep "gedit $1" | grep -v grep | awk '{ print $2 }'`
            echo "$PID"
            while : 
            do
            sleep 1
                if [ -x /proc/$PID ]; then
                    echo "Running"
                else
                    echo "Finished."
                fi
            done

It returns:
Code:
Running
Running
Running
###Keeps running...

No PID and continues to run. When I try this:
Code:
gedit "$1" & PID="$!"
            echo "$PID"
            while : 
            do
            sleep 1
                if [ -x /proc/$PID ]; then
                    echo "Running"
                else
                    echo "Finished."
                fi
            done

It returns:
Code:
22729
Finished.
Finished.
Finished.
###Keeps saying 'finished'..

However this time it does get the PID. I've seen examples for the first scenario identical to mine where it does get the PID. Any further help would be so greatly appreciated!
# 14  
Old 10-18-2017
Have you tried my suggestion of not putting gedit in the background at all?
Login to Reply

« Previous Thread | Next Thread »
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
To check if a file is open and in use (logs are being written to it) shekhar_4_u Shell Programming and Scripting 5 10-13-2015 02:26 PM
Not able to read .csv file until open in vi editor ranabhavish Shell Programming and Scripting 5 11-23-2013 05:06 AM
Vi editor will not open new to UNIX. help please. dovestar UNIX for Dummies Questions & Answers 6 04-19-2013 04:42 PM
Notepad++ hang when open file edited in other text editor jao_madn UNIX and Linux Applications 2 04-22-2012 11:26 AM
Before I delete any file in Unix, How can I check no open file handle is pointing to that file? kchinnam Solaris 12 10-06-2010 02:30 PM
avoid open file to check field. jimmy_y Shell Programming and Scripting 4 10-30-2009 05:58 AM
How to open file in VI Editor at a specific line? skyineyes UNIX for Dummies Questions & Answers 4 11-14-2008 06:36 AM
getting error when open vi editor amitpansuria UNIX for Advanced & Expert Users 1 09-17-2008 09:47 AM
How to give permissions to an open file in vi editor? Pankajakshan Shell Programming and Scripting 5 07-08-2008 04:56 AM
Unable to open files in VI editor ennstate UNIX for Advanced & Expert Users 8 11-06-2007 05:40 AM


All times are GMT -4. The time now is 10:50 AM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
UNIX.COM Login
Username:
Password:  
Show Password