Hello, I'm only taking Intro to UNIX in school right now, so please bear with me. My problem is with a sort-of recycle-bin rig I've created for fun. I'm using Ubuntu 9.04, I am the admin. (only user, actually) of this computer. I'm using this script in ~/.bashrc
# if files exist, remove contents (of purge directory)
ls -lA ~/purge;
echo "^ this was a test, to be sure the following command should work"
purgeTest= "ls -lA ~/purge" # setting a variable to check contents of ~/purge
if [ $purgeTest -ne "total 0" ]; then
rm -r ~/purge/*
fi
side note: I would think that checking if a directory (line 5) has contents is unnecessary, except when I just had rm -r ~/purge/* written, I'd get rm: cannot remove `/home/jzacsh/purge/*': No such file or directory BUT only when the purge directory was empty.
Here is the output I'm seeing on login:
total 0
^ this was a test, to be sure the following command should work
bash: ls -lA ~/purge: No such file or directory
bash: [: -ne: unary operator expected
jzacsh@dell8300:~$
bottom line, questions:
what am i doing wrong to get the "no such file or directory" error, in line 3 just above? (am I using variables incorrectly?)
is -ne operator only for mathematic comparisons - line 4 of error? if so, what should I use?
Why would you want the script to clean your "recylce bin" (doesn't GNOME have that by default?) in your login script? Lets assume that you, by accident "deleted" a file. As soon as you open a new terminal it's gone.
First, there shouldn't be white spaces around the assignment operator. Second, double quotes won't capture the output of the command, use backticks or $( <cmd> ). Third, -ne is for numeric comparison, use != for strings.
pludi: thanks for the quick reply. I actually wrote this originally for my Intro to Unix class, where I needed somewhere to stick temporary files I was working on/looking at, that I didn't want to worry about remembering to clean up. In that class we use FreeBSD. I fixed the errors you mentioned, thank you for the advice.
This is what my code looks like now:
# if files exist, remove contents of purge directory
purgeTest=`ls -lA ~/purge`
if [$purgeTest!="total 0"]; then
rm -r ~/purge/*
fi
Awesome, that worked! (I guess I got rid of the unnecessary whitespace and the necessary). Thanks.
I'm glad you mentioned that, I'm actually a bit confused with the different files. My UNIX teacher taught us ~/.profile was what you use, then the ubuntu forums explained you should use .bashrc for an assignment (like the one I did below).
alias test="cd $HOME/prog/test ; pwd ; ls -la"
My professor explained that its just because every linux/unix system is a bit unique, but I feel like there must be a more reasonable explanation for the different files - or at least a glossary/breakdown of the different ?daily-script-containers? somewhere ... no?
Different shells, more likely. Nothing but BASH uses .bashrc . Lots of linux systems use BASH, but lots of other UNIX systems generally login to ksh or others. Though I have seen situations where a read-only .bashrc exists to prevent people mucking with it, that automatically includes .profile or somesuch if present.