Test if a script can cd into a directory


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Test if a script can cd into a directory
# 1  
Old 07-24-2013
Test if a script can cd into a directory

Is there a way for a bash script to test if it can cd into a directory without actually attempting to cd into it?

I am looking for something along the lines of:

Code:
if [ -d $dir ];then
     #code to execute
fi

except in this case I don't want to test if the directory exists; what I want is to test if the script has the permission to cd into the directory.
I know there are other ways of achieving this but does bash provide a shortcut? Smilie
# 2  
Old 07-24-2013
A process can "cd" into a directory when it has execute-rights on it. Test simply if it is a directory AND if the x-bit is set for you:

Code:
if [ -d "$dir" -a -x "$dir" ] ; then
     # do something here
fi

I hope this helps.

bakunin
This User Gave Thanks to bakunin For This Post:
# 3  
Old 07-24-2013
You can also try:
Code:
if ( cd "$dir" 2>/dev/null )
then    # do something
fi

If you want the diagnostic from cd if the cd failed, drop the redirection, or if you want a custom diagnostic add an else clause to your if statement. Performing the cd in a subshell will not affect the current working directory for the rest of this script.

Some people find this form easier to understand, but creating a subshell won't be as efficient as running
Code:
test -d "$dir" && test -x "$dir"

in the current shell execution environment.

Last edited by Don Cragun; 07-24-2013 at 08:40 PM.. Reason: match open and close CODE tags
This User Gave Thanks to Don Cragun For This Post:
# 4  
Old 07-24-2013
Just test $?. If it's zero, the "cd" worked.
# 5  
Old 07-24-2013
I vote for
Code:
test -d "$dir"/.

This fosters an autofs mount or an AFS volume mount, so is as safe as an actual cd. No need for an additional test -x.
These 3 Users Gave Thanks to MadeInGermany For This Post:
# 6  
Old 07-24-2013
Quote:
Originally Posted by MadeInGermany
No need for an additional test -x.
That's insufficient. If all but the final path component have execute/search permission, the stat() syscall for test -d succeeds, but the chdir() syscall for cd fails.

Regards,
Alister

Last edited by alister; 07-24-2013 at 11:06 PM..
# 7  
Old 07-24-2013
ok. insightful -- doing the cd in a subshell. thanks!

---------- Post updated at 02:14 AM ---------- Previous update was at 02:13 AM ----------

exactly what i was hoping to find. thanks.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to check weather a string is like test* or test* ot *test* in if condition

How to check weather a string is like test* or test* ot *test* in if condition (5 Replies)
Discussion started by: johnjerome
5 Replies

2. Shell Programming and Scripting

Test on string containing spacewhile test 1 -eq 1 do read a $a if test $a = quitC then break fi d

This is the code: while test 1 -eq 1 do read a $a if test $a = stop then break fi done I read a command on every loop an execute it. I check if the string equals the word stop to end the loop,but it say that I gave too many arguments to test. For example echo hello. Now the... (1 Reply)
Discussion started by: Max89
1 Replies

3. Shell Programming and Scripting

FIle (directory) test operator (bash)

I'm almost pulling out my hair trying to figure out what's wrong with this... there's no reason I can see that it shouldn't be working. It seems that the code acts as though the conditional statement is true no matter what - I've even tried removing the negation operator, but it always goes into... (5 Replies)
Discussion started by: wildbluefaerie
5 Replies

4. UNIX for Dummies Questions & Answers

rm: Unable to remove directory /mnt/users/test/logs/: File exists

rm: Unable to remove directory /mnt/users/test/logs/: File exists ls -latr total 191208 drwxrwxrwx 6 test echo 4096 Jul 3 22:36 .. -rwxrwxrwx 1 test echo 97692804 Jul 3 22:36 .nfsDFA4 drwxrwxr-x 2 test echo 4096 Jul 3 23:00 . M not able to delete... (4 Replies)
Discussion started by: solitare123
4 Replies

5. Shell Programming and Scripting

Problem when test to see if directory exists

Hi, I'm writing a shell script that will create a folder if it does not exist yet. Here's the script: (this if statement is inside a while loop) folderName="Pics" if ! test -d folderName then mkdir $folderName fi However, after the folder Pics has been created, every time the... (3 Replies)
Discussion started by: trivektor
3 Replies

6. Solaris

test and .test in same directory

i am using solaris 5.10. i can create two different files "test" and ".test" in the same directory. now suppose i want to change the attribute of the hidden file .test to visible is it possible??? since "." is just an attribute to mark a file hidden why is unix allows creation of "file" and... (14 Replies)
Discussion started by: vikashtulsiyan
14 Replies

7. Shell Programming and Scripting

test for directory being subdir of another directory

I've been using the following code to make sure a shell script only runs under a "safe" directory. Comments/Improvements? #!/bin/sh #----------------------------------------------------------------------------# #..........................................................#... (8 Replies)
Discussion started by: hackware
8 Replies

8. UNIX for Advanced & Expert Users

test if there are files in directory

Hi, I am trying to test if there are files in a directory and if theres i want to get a list. Any ideas? Thanks in advance (1 Reply)
Discussion started by: RSAM2007
1 Replies

9. Shell Programming and Scripting

how to test filename is file or directory

hi all plz let me how to test output of "tail -1 filelist.lst" is file or directory. regards -Bali Reddy (1 Reply)
Discussion started by: balireddy_77
1 Replies

10. HP-UX

How to test directory availibility

Hello, I'm trying to test if a directory specified in a script parameter is available or not. I wrote a little code to do so, but there's a problem because I receive an error message. My code: #Verify command parameter if then echo 'Incorrect command parameter' echo... (3 Replies)
Discussion started by: santuna
3 Replies
Login or Register to Ask a Question