What's the reason behind having -n option for mv command?


 
Thread Tools Search this Thread
Operating Systems OS X (Apple) What's the reason behind having -n option for mv command?
# 8  
Old 02-29-2016
Quote:
Originally Posted by RudiC
And what is "overwrite2 not overwritten" (which i would guess is printed to stderr)?
It's an informational message in verbose mode (-v option) reporting on shell's activity when executing (or failing to execute) commands. Overwrite.txt and overwrite2.txt are the test files I created for learning purpose.
# 9  
Old 02-29-2016
Quote:
Originally Posted by scrutinizerix
It's an informational message in verbose mode (-v option) reporting on shell's activity when executing (or failing to execute) commands.
Two things: first, what you called an "informational message" i did call a "diagnostic message". In this regard i'd call the two expressions synonymous.

Second, and more important: no, the message is not "reporting on shell's activity" at all, because at this point the shell has no activity. When you issue the command:

Code:
mv A B

(regardless of the files involved and if it succeeds or not) what happens is: the shell first interprets the command line. If you happened to use a variable for a filename like this:

Code:
file="/some/file"
mv $file B

the shell would expand the variable to its content first.

Also, wildcards would be expanded. You didn't use any, but suppose your command would be

Code:
ls -l over*

then the shell would expand the "over*" to a list of filenames/directory names which start with "over". After such an expansion the command would look like this:

Code:
ls -l overwrite overwrite2

Also the PATH variable is used to locate "mv", which you entered without a path. Because perhaps "/usr/bin" is part of the PATH variable the shell calls "/usr/bin/mv" when you enter "mv". If "mv" would be a shell function then this would be executed instead. The same for an alias, etc.. So, after all these transformations, something like the following is in fact executed:

Code:
/usr/bin/mv A B

In fact, executed is only the binary: "/usr/bin/mv". The shell will pass the parameters you gave at the command line already parsed (that is: broken into pieces one argument each) to the executable ("/usr/bin/mv"). At this point, the shell passes over to the executable and this runs on its own. The shell does nothing.

Only when the executable ends, it sets a "return code" and the shell sets its special variable "$?" to this return code. This is why i suggested to execute the 4 commands in post #5: the return code (or error code, another synonym) is set anew after each execution of a binary so that "$?" always holds the return code of the last command.

All this means: the "...not overwritten" is not a message from the shell, but in fact a message from "mv" which tells you what is going on. You could also issue a echo $? directly after and find out what the error code is - it is perhaps non-zero when the file could not be overwritten because of the -n switch.

I hope this helps.

bakunin
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Command option substitution?

Hi folks, I totally dislike asking questions in forums but this one eats up to much of my time I need to spend on other topics. I have a shell-script in which I call a terminal. I want to invoke bash inside the terminal and print a message inside bash with aid of a here document. See... (7 Replies)
Discussion started by: bluntroller
7 Replies

2. Solaris

Fsck command without any option

Dear all, I want to execute fsck command,can i execute fsck command without any option asking for more confidence. Thanks and Regards Monoj Das (1 Reply)
Discussion started by: monojcool
1 Replies

3. Shell Programming and Scripting

How to use a variable as a command option?

I am just learning shell scripting and already I found out I have the bad habit of thinking that it is similar to php or c. I learned some basics and now encountered this problem: On shell it is possible to type: $ date --date="2009-10-10 09:08:34" Sat Oct 10 09:08:34 CEST 2009 ... (2 Replies)
Discussion started by: quinestor
2 Replies

4. HP-UX

oracle processes with SOCKT in glance command....reason?

Hi Friends, I could see following oracle process in the glance command. i see nothing running in the database although. I tried google it but no success. Another team ,which needs all the processes on the server is complaining. Can someone help me what exactly are these sessions/ how to ... (1 Reply)
Discussion started by: kunwar
1 Replies

5. Shell Programming and Scripting

-n option with grep command

Hi, what is the meaning of -n option before the grep command ? grep command searches for the specified string in the file tmp_crontab.txt but what does -n mean ? With Regards (1 Reply)
Discussion started by: milink
1 Replies

6. HP-UX

who command option not working

Running HP 11.31 on a HP3600. But when I log in as a user the who command works but if I use an option like "who -m" I get nothing. Any thoughts on what is causing this problem. (11 Replies)
Discussion started by: KMRWHUNTER
11 Replies

7. Solaris

Why does the 'ps' command with -u option not working?

How can I use the 'ps' command to view current sessions but only for a given process/user, with the -u parm? In older versions of Unix, this used to work, but not in Sun Solaris. Thanks (4 Replies)
Discussion started by: ElCaito
4 Replies

8. UNIX for Dummies Questions & Answers

option for ls command

i'm using SunOS 5.7 and I know theres a ls option for seeing what kind of files are in a directory. I was wondering if there was a ls option that could see if the files are txt or files that can be opened in vi (1 Reply)
Discussion started by: eloquent99
1 Replies

9. Shell Programming and Scripting

-c option in ping command

What does '-c' mean in ping command? Is this option specific to bash shell? Deepa (3 Replies)
Discussion started by: Deepa
3 Replies
Login or Register to Ask a Question