ruby-changes:28951
From: zzak <ko1@a...>
Date: Fri, 31 May 2013 17:58:16 +0900 (JST)
Subject: [ruby-changes:28951] zzak:r41003 (trunk): * process.c: Improve Process::exec documentation
zzak 2013-05-31 17:58:06 +0900 (Fri, 31 May 2013) New Revision: 41003 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=41003 Log: * process.c: Improve Process::exec documentation Modified files: trunk/ChangeLog trunk/process.c Index: ChangeLog =================================================================== --- ChangeLog (revision 41002) +++ ChangeLog (revision 41003) @@ -1,3 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Fri May 31 17:57:21 2013 Zachary Scott <zachary@z...> + + * process.c: Improve Process::exec documentation + Fri May 31 17:26:42 2013 Nobuyoshi Nakada <nobu@r...> * vm_eval.c (rb_funcallv): add better names of rb_funcall2. Index: process.c =================================================================== --- process.c (revision 41002) +++ process.c (revision 41003) @@ -2330,55 +2330,71 @@ static int rb_exec_without_timer_thread( https://github.com/ruby/ruby/blob/trunk/process.c#L2330 * call-seq: * exec([env,] command... [,options]) * - * Replaces the current process by running the given external _command_. - * _command..._ is one of following forms. + * Replaces the current process by running the given external _command_, which + * can take one of the following forms: + * + * [<code>exec(commandline)</code>] + * command line string which is passed to the standard shell + * [<code>exec(cmdname, arg1, ...)</code>] + * command name and one or more arguments (no shell) + * [<code>exec([cmdname, argv0], arg1, ...)</code>] + * command name, argv[0] and zero or more arguments (no shell) + * + * In the first form, the string is taken as a command line that is subject to + * shell expansion before being executed. + * + * The standard shell always means <code>"/bin/sh"</code> on Unix-like systems, + * same as <code>ENV["RUBYSHELL"]</code> + * (or <code>ENV["COMSPEC"]</code> on Windows NT series), and similar. + * + * If the string from the first form (<code>exec("command")</code>) follows + * these simple rules: + * + * * no meta characters + * * no shell reserved word and no special built-in + * * Ruby invokes the command directly without shell + * + * You can force shell invocation by adding ";" to the string (because ";" is + * a meta character). * - * commandline : command line string which is passed to the standard shell - * cmdname, arg1, ... : command name and one or more arguments (no shell) - * [cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell) - * - * If single string is given as the command, - * it is taken as a command line that is subject to shell expansion before being executed. - * - * The standard shell means always <code>"/bin/sh"</code> on Unix-like systems, - * <code>ENV["RUBYSHELL"]</code> or <code>ENV["COMSPEC"]</code> on Windows NT series, and - * similar. - * If _commandline_ is simple enough, - * no meta characters, no shell reserved word and no special built-in, - * Ruby invokes the command directly without shell. - * You can force shell invocation by adding ";" for _commandline_ (because ";" is a meta character). * Note that this behavior is observable by pid obtained - * (return value of spawn() and IO#pid for IO.popen) is the pid of the invoked command, not shell. + * (return value of spawn() and IO#pid for IO.popen) is the pid of the invoked + * command, not shell. * - * If two or more +string+ given, - * the first is taken as a command name and - * the rest are passed as parameters to command with no shell expansion. - * - * If a two-element array at the beginning of the command, - * the first element is the command to be executed, - * and the second argument is used as the <code>argv[0]</code> value, - * which may show up in process listings. + * In the second form (<code>exec("command1", "arg1", ...)</code>), the first + * is taken as a command name and the rest are passed as parameters to command + * with no shell expansion. + * + * In the third form (<code>exec(["command", "argv0"], "arg1", ...)</code>), + * starting a two-element array at the beginning of the command, the first + * element is the command to be executed, and the second argument is used as + * the <code>argv[0]</code> value, which may show up in process listings. * - * In order to execute the command, one of the <code>exec(2)</code> - * system calls is used, so the running command may inherit some of the environment + * In order to execute the command, one of the <code>exec(2)</code> system + * calls are used, so the running command may inherit some of the environment * of the original program (including open file descriptors). - * This behavior is modified by env and options. - * See <code>spawn</code> for details. * - * Raises SystemCallError if the command couldn't execute (typically - * <code>Errno::ENOENT</code> when it was not found). + * This behavior is modified by the given +env+ and +options+ parameters. See + * ::spawn for details. + * + * If the command fails to execute (typically <code>Errno::ENOENT</code> when + * it was not found) a SystemCallError exception is raised. + * + * This method modifies process attributes according to given +options+ before + * <code>exec(2)</code> system call. See ::spawn for more details about the + * given +options+. * - * This method modifies process attributes according to _options_ - * (details described in <code>spawn</code>) - * before <code>exec(2)</code> system call. - * The modified attributes may be retained when <code>exec(2)</code> system call fails. - * For example, hard resource limits is not restorable. - * If it is not acceptable, consider to create a child process using <code>spawn</code> or <code>system</code>. + * The modified attributes may be retained when <code>exec(2)</code> system + * call fails. + * + * For example, hard resource limits are not restorable. + * + * Consider to create a child process using ::spawn or Kernel#system if this + * is not acceptable. * * exec "echo *" # echoes list of files in current directory * # never get here * - * * exec "echo", "*" # echoes an asterisk * # never get here */ -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/