What is the difference between running a command directly and with `bash -c`? The Next CEO of Stack OverflowDoes the shebang determine the shell which runs the script?What exactly happens when I execute a file in my shell?Difference between sh -x and ./ for script executionThe first Line of Scriptingcomm fails on bash variable inputbash -c and noninteractive shellWhat is the language that appears on the first line of a script?Is the shell created by `bash -i -c <command>` interactive?How to specify a compound command as an argument to another command?Use system command instead of Bash builtin without specifying the full pathWhat is the difference between kill , pkill and killallCompare running a command directly and in backgroundWhat differences are between running a command in shell with and without `bash -c`?Differences between reserved word and command `time` on shell builtin, function, pipeline and command list?Why does Bash implement time as a reserved word instead of a builtin?What is the difference between using bash and sh to run a script?How does the shell decide which of same-name keyword, builtin, and external command to run?What's the difference between using shell command (e.g. foo) directly and using $(foo)?Difference between “cd -” and “cd ~-”

How can the PCs determine if an item is a phylactery?

Small nick on power cord from an electric alarm clock, and copper wiring exposed but intact

Could you use a laser beam as a modulated carrier wave for radio signal?

Compensation for working overtime on Saturdays

Traveling with my 5 year old daughter (as the father) without the mother from Germany to Mexico

What are the unusually-enlarged wing sections on this P-38 Lightning?

Find the majority element, which appears more than half the time

Strange use of "whether ... than ..." in official text

Can this transistor (2n2222) take 6V on emitter-base? Am I reading datasheet incorrectly?

pgfplots: How to draw a tangent graph below two others?

How do I keep Mac Emacs from trapping M-`?

How should I connect my cat5 cable to connectors having an orange-green line?

Car headlights in a world without electricity

Another proof that dividing by 0 does not exist -- is it right?

Raspberry pi 3 B with Ubuntu 18.04 server arm64: what pi version

Find a path from s to t using as few red nodes as possible

Mathematica command that allows it to read my intentions

How does a dynamic QR code work?

What did the word "leisure" mean in late 18th Century usage?

Why can't we say "I have been having a dog"?

Why do we say “un seul M” and not “une seule M” even though M is a “consonne”?

Could a dragon use its wings to swim?

Does Germany produce more waste than the US?

Direct Implications Between USA and UK in Event of No-Deal Brexit



What is the difference between running a command directly and with `bash -c`?



The Next CEO of Stack OverflowDoes the shebang determine the shell which runs the script?What exactly happens when I execute a file in my shell?Difference between sh -x and ./ for script executionThe first Line of Scriptingcomm fails on bash variable inputbash -c and noninteractive shellWhat is the language that appears on the first line of a script?Is the shell created by `bash -i -c <command>` interactive?How to specify a compound command as an argument to another command?Use system command instead of Bash builtin without specifying the full pathWhat is the difference between kill , pkill and killallCompare running a command directly and in backgroundWhat differences are between running a command in shell with and without `bash -c`?Differences between reserved word and command `time` on shell builtin, function, pipeline and command list?Why does Bash implement time as a reserved word instead of a builtin?What is the difference between using bash and sh to run a script?How does the shell decide which of same-name keyword, builtin, and external command to run?What's the difference between using shell command (e.g. foo) directly and using $(foo)?Difference between “cd -” and “cd ~-”










6















For a command (builtin or external), what is the difference of
running it directly in a bash shell process and with bash -c in
the bash shell? What are their advantages and disadvantages
comparing to each other?



For example, in a bash shell, run `date` directly, and run `bash -c
date`. Also consider a builtin command instead of an external one.









share|improve this question




























    6















    For a command (builtin or external), what is the difference of
    running it directly in a bash shell process and with bash -c in
    the bash shell? What are their advantages and disadvantages
    comparing to each other?



    For example, in a bash shell, run `date` directly, and run `bash -c
    date`. Also consider a builtin command instead of an external one.









    share|improve this question


























      6












      6








      6


      4






      For a command (builtin or external), what is the difference of
      running it directly in a bash shell process and with bash -c in
      the bash shell? What are their advantages and disadvantages
      comparing to each other?



      For example, in a bash shell, run `date` directly, and run `bash -c
      date`. Also consider a builtin command instead of an external one.









      share|improve this question
















      For a command (builtin or external), what is the difference of
      running it directly in a bash shell process and with bash -c in
      the bash shell? What are their advantages and disadvantages
      comparing to each other?



      For example, in a bash shell, run `date` directly, and run `bash -c
      date`. Also consider a builtin command instead of an external one.






      bash






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Apr 14 '16 at 23:38







      Tim

















      asked Apr 14 '16 at 23:12









      TimTim

      28.4k78269490




      28.4k78269490




















          4 Answers
          4






          active

          oldest

          votes


















          10















          1. The -c option allows programs to run commands. 
            It’s a lot easier to fork and do



            execl("/bin/sh", "sh", "-c", "date | od -cb && ps > ps.out", NULL);


            than it is to fork, create a pipe, fork again,
            call execl in each child, call wait, check the exit status,
            fork again, call close(1), open the file,
            ensure that it is open on file descriptor 1, and do another execl
            I believe that this was the reason why the option was created
            in the first place.



            The system() library function runs a command by the above method.



          2. It provides a way to take an arbitrarily complex command
            and make it look like a simple command. 
            This is useful with programs that run a user-specified command,
            such as find … -exec or xargs
            But you already knew that; it was part of the answer to your question,
            How to specify a compound command as an argument to another command?


          3. It can come in handy
            if you’re running an interactive shell other than bash. 
            Conversely, if you are running bash, you can use this syntax



            $ ash -c "command"

             
            $ csh -c "command"

             
            $ dash -c "command"

             
            $ zsh -c "command"


            to run one command in another shell,
            as all of those shells also recognize the -c option. 
            Of course you could achieve the same result with



            $ ash
            ash$ command

            ash$ exit
             
            $ csh
            csh$ command

            csh$ exit
             
            $ dash
            dash$ command

            dash$ exit
             
            $ zsh
            zsh$ command

            zsh$ exit


            I used ash$ , etc., to illustrate the prompts from the different shells;
            you probably wouldn’t actually get those.




          4. It can come in handy
            if you want to run one command in a “fresh” bash shell; for example,



            $ ls -lA
            total 0
            -rw-r--r-- 1 gman gman 0 Apr 14 20:16 .file1
            -rw-r--r-- 1 gman gman 0 Apr 14 20:16 file2

            $ echo *
            file2

            $ shopt -s dotglob

            $ echo *
            .file1 file2

            $ bash -c "echo *"
            file2


            or



            $ type shift
            shift is a shell builtin

            $ alias shift=date

            $ type shift
            shift is aliased to ‘date’

            $ bash -c "type shift"
            shift is a shell builtin



          5. The above is a misleading over-simplification. 
            When bash is run with -c, it is considered a non-interactive shell,
            and it does not read ~/.bashrc, unless is -i specified.  So,



            $ type cp
            cp is aliased to ‘cp -i’ # Defined in ~/.bashrc
             
            $ cp .file1 file2
            cp: overwrite ‘file2’? n
             
            $ bash -c "cp .file1 file2"
            # Existing file is overwritten without confirmation!
            $ bash -c -i "cp .file1 file2"
            cp: overwrite ‘file2’? n


            You could use -ci, -i -c or -ic instead of -c -i.



            This probably applies to some extent to the other shells
            mentioned in paragraph 3, so the long form (i.e., the second form,
            which is actually exactly the same amount of typing) might be safer, especially if you have initialization/configuration files
            set up for those shells.




          6. As Wildcard explained, since you’re running a new process tree
            (a new shell process and, potentially, its child process(es)),
            changes to the environment made in the subshell
            cannot affect the parent shell (current directory,
            values of environment variables, function definitions, etc.) 
            Therefore, it’s hard to imagine a shell builtin command
            that would be useful when run by sh -c. 
            fg, bg, and jobs cannot affect or access background jobs
            started by the parent shell, nor can wait wait for them. 
            sh -c "exec some_program" is essentially equivalent
            to just running some_program the normal way,
            directly from the interactive shell. 
            sh -c exit is a big waste of time. 
            ulimit and umask could change the system settings
            for the child process, and then exit without exercising them.



            Just about the only builtin command that would be functional
            in a sh -c context is kill
            Of course, the commands that only produce output
            (echo, printf, pwd and type) are unaffected,
            and, if you write a file, that will persist.



          7. Of course you can use a builtin in conjunction with
            an external command; e.g.,

            sh -c "cd some_directory; some_program"


            but you can achieve essentially the same effect with a normal subshell:

            (cd some_directory; some_program)


            which is more efficient. 
            The same (both parts) can be said for something like

            sh -c "umask 77; some_program"


            or ulimit (or shopt). 
            And since you can put an arbitrarily complex command after -c
            up to the complexity of a full-blown shell script —
            you might have occasion to use any of the repertoire of builtins;
            e.g., source, read, export, times, set and unset, etc.





          share|improve this answer

























          • +1 except I think you go too far on builtins. To be clear echo printf type pwd are builtins; so are set shopt shift read readarray mapfile trap declare/typeset export local let readonly unset which don't affect the parent but may still be useful inside a moderately complicated -c.

            – dave_thompson_085
            Apr 15 '16 at 8:06











          • What is your point?  Did you read my 6th bullet, where I said that builtins are useful in conjunction with external command(s)?  Are you saying that I should give more examples in bullet #6?

            – G-Man
            Apr 15 '16 at 8:56











          • Thanks. Someone said that your reply also answered another question, but is that true?

            – Tim
            Apr 15 '16 at 15:53











          • @Tim: What question?  I see five question marks in that “question”.  OK, I’m kidding — a little.  What are you still unsure about?  I showed an example of sh -c being used with a complex command line including three programs, a pipe, a &&, and a redirection; I showed an example of it being used with a compound command line including a cd, a ;, and a program; I showed an example of it being used with exec; and I said it could be used with builtins like echo, kill, printf, pwd and type (and also exit, ulimit, and umask).  What more do you want to know?  … (Cont’d)

            – G-Man
            Apr 15 '16 at 22:45











          • (Cont’d) …  If you mean “Does it mean execve() can operate on a script?”, (1) that has nothing to do with bash -c, and (2) what research have you done?  The execve man page answers this, and a search of this site yields this, this, this, this, this, and this.

            – G-Man
            Apr 15 '16 at 22:45


















          5














          Running bash -c "my command here" vs. just running my command here is primarily different in that the former starts a subshell and the latter runs the commands in the current shell.



          As far as built-in commands vs. external commands, it doesn't really relate—anything you can run in the current shell, you can run in a subshell.



          There are a number of differences in the effects, however:



          • Changes to the environment made in the subshell cannot affect the parent shell (current directory, values of environment variables, function definitions, etc.)

          • Variables set in the parent shell that have not been exported will be unavailable in the subshell.

          This is far from an exhaustive list of differences, but it contains the key point: you are running a different process with bash -c; it's not the same process as your original shell.



          There is also a performance hit incurred by spawning a subshell; this is most relevant if your script is run frequently, or if your command is inside a loop of some kind.






          share|improve this answer


















          • 1





            FYI, I quoted your answer in my answer.  I tried to ping you from there, knowing that that doesn't work.

            – G-Man
            Apr 15 '16 at 2:46


















          2














          The -c option basically runs a mini-shell script provided as a CLI argument rather than a file.



          $ bash -c the_script the_scriptname 1 2 3 


          is virtually equivalent to:



          $ echo the_script > the_scriptname
          $ bash the_scriptname 1 2 3
          $ rm the_scriptname


          As you can see from:



          $ bash -c 'printf " ->%sn" $0 "$@"; echo $-;' scriptname 1 2 3
          ->scriptname
          ->1
          ->2
          ->3
          hBc


          (In English:
          $0 == scriptname; $@ == (1 2 3);
          and bash will:
          hash commands; perform Brace expansion, and it has been run with the -c flag)



          and:



           $ echo 'printf " ->%sn" $0 "$@"; echo $-;' > scriptname
          $ bash scriptname 1 2 3
          ->scriptname
          ->1
          ->2
          ->3
          hB





          share|improve this answer






























            -1















            -c string



            If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to
            the positional parameters, starting with $0.




            This will solve your questions I guess






            share|improve this answer























            • thanks. can you explain explicitly to my questions?

              – Tim
              Apr 14 '16 at 23:27











            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "106"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f276581%2fwhat-is-the-difference-between-running-a-command-directly-and-with-bash-c%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            4 Answers
            4






            active

            oldest

            votes








            4 Answers
            4






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            10















            1. The -c option allows programs to run commands. 
              It’s a lot easier to fork and do



              execl("/bin/sh", "sh", "-c", "date | od -cb && ps > ps.out", NULL);


              than it is to fork, create a pipe, fork again,
              call execl in each child, call wait, check the exit status,
              fork again, call close(1), open the file,
              ensure that it is open on file descriptor 1, and do another execl
              I believe that this was the reason why the option was created
              in the first place.



              The system() library function runs a command by the above method.



            2. It provides a way to take an arbitrarily complex command
              and make it look like a simple command. 
              This is useful with programs that run a user-specified command,
              such as find … -exec or xargs
              But you already knew that; it was part of the answer to your question,
              How to specify a compound command as an argument to another command?


            3. It can come in handy
              if you’re running an interactive shell other than bash. 
              Conversely, if you are running bash, you can use this syntax



              $ ash -c "command"

               
              $ csh -c "command"

               
              $ dash -c "command"

               
              $ zsh -c "command"


              to run one command in another shell,
              as all of those shells also recognize the -c option. 
              Of course you could achieve the same result with



              $ ash
              ash$ command

              ash$ exit
               
              $ csh
              csh$ command

              csh$ exit
               
              $ dash
              dash$ command

              dash$ exit
               
              $ zsh
              zsh$ command

              zsh$ exit


              I used ash$ , etc., to illustrate the prompts from the different shells;
              you probably wouldn’t actually get those.




            4. It can come in handy
              if you want to run one command in a “fresh” bash shell; for example,



              $ ls -lA
              total 0
              -rw-r--r-- 1 gman gman 0 Apr 14 20:16 .file1
              -rw-r--r-- 1 gman gman 0 Apr 14 20:16 file2

              $ echo *
              file2

              $ shopt -s dotglob

              $ echo *
              .file1 file2

              $ bash -c "echo *"
              file2


              or



              $ type shift
              shift is a shell builtin

              $ alias shift=date

              $ type shift
              shift is aliased to ‘date’

              $ bash -c "type shift"
              shift is a shell builtin



            5. The above is a misleading over-simplification. 
              When bash is run with -c, it is considered a non-interactive shell,
              and it does not read ~/.bashrc, unless is -i specified.  So,



              $ type cp
              cp is aliased to ‘cp -i’ # Defined in ~/.bashrc
               
              $ cp .file1 file2
              cp: overwrite ‘file2’? n
               
              $ bash -c "cp .file1 file2"
              # Existing file is overwritten without confirmation!
              $ bash -c -i "cp .file1 file2"
              cp: overwrite ‘file2’? n


              You could use -ci, -i -c or -ic instead of -c -i.



              This probably applies to some extent to the other shells
              mentioned in paragraph 3, so the long form (i.e., the second form,
              which is actually exactly the same amount of typing) might be safer, especially if you have initialization/configuration files
              set up for those shells.




            6. As Wildcard explained, since you’re running a new process tree
              (a new shell process and, potentially, its child process(es)),
              changes to the environment made in the subshell
              cannot affect the parent shell (current directory,
              values of environment variables, function definitions, etc.) 
              Therefore, it’s hard to imagine a shell builtin command
              that would be useful when run by sh -c. 
              fg, bg, and jobs cannot affect or access background jobs
              started by the parent shell, nor can wait wait for them. 
              sh -c "exec some_program" is essentially equivalent
              to just running some_program the normal way,
              directly from the interactive shell. 
              sh -c exit is a big waste of time. 
              ulimit and umask could change the system settings
              for the child process, and then exit without exercising them.



              Just about the only builtin command that would be functional
              in a sh -c context is kill
              Of course, the commands that only produce output
              (echo, printf, pwd and type) are unaffected,
              and, if you write a file, that will persist.



            7. Of course you can use a builtin in conjunction with
              an external command; e.g.,

              sh -c "cd some_directory; some_program"


              but you can achieve essentially the same effect with a normal subshell:

              (cd some_directory; some_program)


              which is more efficient. 
              The same (both parts) can be said for something like

              sh -c "umask 77; some_program"


              or ulimit (or shopt). 
              And since you can put an arbitrarily complex command after -c
              up to the complexity of a full-blown shell script —
              you might have occasion to use any of the repertoire of builtins;
              e.g., source, read, export, times, set and unset, etc.





            share|improve this answer

























            • +1 except I think you go too far on builtins. To be clear echo printf type pwd are builtins; so are set shopt shift read readarray mapfile trap declare/typeset export local let readonly unset which don't affect the parent but may still be useful inside a moderately complicated -c.

              – dave_thompson_085
              Apr 15 '16 at 8:06











            • What is your point?  Did you read my 6th bullet, where I said that builtins are useful in conjunction with external command(s)?  Are you saying that I should give more examples in bullet #6?

              – G-Man
              Apr 15 '16 at 8:56











            • Thanks. Someone said that your reply also answered another question, but is that true?

              – Tim
              Apr 15 '16 at 15:53











            • @Tim: What question?  I see five question marks in that “question”.  OK, I’m kidding — a little.  What are you still unsure about?  I showed an example of sh -c being used with a complex command line including three programs, a pipe, a &&, and a redirection; I showed an example of it being used with a compound command line including a cd, a ;, and a program; I showed an example of it being used with exec; and I said it could be used with builtins like echo, kill, printf, pwd and type (and also exit, ulimit, and umask).  What more do you want to know?  … (Cont’d)

              – G-Man
              Apr 15 '16 at 22:45











            • (Cont’d) …  If you mean “Does it mean execve() can operate on a script?”, (1) that has nothing to do with bash -c, and (2) what research have you done?  The execve man page answers this, and a search of this site yields this, this, this, this, this, and this.

              – G-Man
              Apr 15 '16 at 22:45















            10















            1. The -c option allows programs to run commands. 
              It’s a lot easier to fork and do



              execl("/bin/sh", "sh", "-c", "date | od -cb && ps > ps.out", NULL);


              than it is to fork, create a pipe, fork again,
              call execl in each child, call wait, check the exit status,
              fork again, call close(1), open the file,
              ensure that it is open on file descriptor 1, and do another execl
              I believe that this was the reason why the option was created
              in the first place.



              The system() library function runs a command by the above method.



            2. It provides a way to take an arbitrarily complex command
              and make it look like a simple command. 
              This is useful with programs that run a user-specified command,
              such as find … -exec or xargs
              But you already knew that; it was part of the answer to your question,
              How to specify a compound command as an argument to another command?


            3. It can come in handy
              if you’re running an interactive shell other than bash. 
              Conversely, if you are running bash, you can use this syntax



              $ ash -c "command"

               
              $ csh -c "command"

               
              $ dash -c "command"

               
              $ zsh -c "command"


              to run one command in another shell,
              as all of those shells also recognize the -c option. 
              Of course you could achieve the same result with



              $ ash
              ash$ command

              ash$ exit
               
              $ csh
              csh$ command

              csh$ exit
               
              $ dash
              dash$ command

              dash$ exit
               
              $ zsh
              zsh$ command

              zsh$ exit


              I used ash$ , etc., to illustrate the prompts from the different shells;
              you probably wouldn’t actually get those.




            4. It can come in handy
              if you want to run one command in a “fresh” bash shell; for example,



              $ ls -lA
              total 0
              -rw-r--r-- 1 gman gman 0 Apr 14 20:16 .file1
              -rw-r--r-- 1 gman gman 0 Apr 14 20:16 file2

              $ echo *
              file2

              $ shopt -s dotglob

              $ echo *
              .file1 file2

              $ bash -c "echo *"
              file2


              or



              $ type shift
              shift is a shell builtin

              $ alias shift=date

              $ type shift
              shift is aliased to ‘date’

              $ bash -c "type shift"
              shift is a shell builtin



            5. The above is a misleading over-simplification. 
              When bash is run with -c, it is considered a non-interactive shell,
              and it does not read ~/.bashrc, unless is -i specified.  So,



              $ type cp
              cp is aliased to ‘cp -i’ # Defined in ~/.bashrc
               
              $ cp .file1 file2
              cp: overwrite ‘file2’? n
               
              $ bash -c "cp .file1 file2"
              # Existing file is overwritten without confirmation!
              $ bash -c -i "cp .file1 file2"
              cp: overwrite ‘file2’? n


              You could use -ci, -i -c or -ic instead of -c -i.



              This probably applies to some extent to the other shells
              mentioned in paragraph 3, so the long form (i.e., the second form,
              which is actually exactly the same amount of typing) might be safer, especially if you have initialization/configuration files
              set up for those shells.




            6. As Wildcard explained, since you’re running a new process tree
              (a new shell process and, potentially, its child process(es)),
              changes to the environment made in the subshell
              cannot affect the parent shell (current directory,
              values of environment variables, function definitions, etc.) 
              Therefore, it’s hard to imagine a shell builtin command
              that would be useful when run by sh -c. 
              fg, bg, and jobs cannot affect or access background jobs
              started by the parent shell, nor can wait wait for them. 
              sh -c "exec some_program" is essentially equivalent
              to just running some_program the normal way,
              directly from the interactive shell. 
              sh -c exit is a big waste of time. 
              ulimit and umask could change the system settings
              for the child process, and then exit without exercising them.



              Just about the only builtin command that would be functional
              in a sh -c context is kill
              Of course, the commands that only produce output
              (echo, printf, pwd and type) are unaffected,
              and, if you write a file, that will persist.



            7. Of course you can use a builtin in conjunction with
              an external command; e.g.,

              sh -c "cd some_directory; some_program"


              but you can achieve essentially the same effect with a normal subshell:

              (cd some_directory; some_program)


              which is more efficient. 
              The same (both parts) can be said for something like

              sh -c "umask 77; some_program"


              or ulimit (or shopt). 
              And since you can put an arbitrarily complex command after -c
              up to the complexity of a full-blown shell script —
              you might have occasion to use any of the repertoire of builtins;
              e.g., source, read, export, times, set and unset, etc.





            share|improve this answer

























            • +1 except I think you go too far on builtins. To be clear echo printf type pwd are builtins; so are set shopt shift read readarray mapfile trap declare/typeset export local let readonly unset which don't affect the parent but may still be useful inside a moderately complicated -c.

              – dave_thompson_085
              Apr 15 '16 at 8:06











            • What is your point?  Did you read my 6th bullet, where I said that builtins are useful in conjunction with external command(s)?  Are you saying that I should give more examples in bullet #6?

              – G-Man
              Apr 15 '16 at 8:56











            • Thanks. Someone said that your reply also answered another question, but is that true?

              – Tim
              Apr 15 '16 at 15:53











            • @Tim: What question?  I see five question marks in that “question”.  OK, I’m kidding — a little.  What are you still unsure about?  I showed an example of sh -c being used with a complex command line including three programs, a pipe, a &&, and a redirection; I showed an example of it being used with a compound command line including a cd, a ;, and a program; I showed an example of it being used with exec; and I said it could be used with builtins like echo, kill, printf, pwd and type (and also exit, ulimit, and umask).  What more do you want to know?  … (Cont’d)

              – G-Man
              Apr 15 '16 at 22:45











            • (Cont’d) …  If you mean “Does it mean execve() can operate on a script?”, (1) that has nothing to do with bash -c, and (2) what research have you done?  The execve man page answers this, and a search of this site yields this, this, this, this, this, and this.

              – G-Man
              Apr 15 '16 at 22:45













            10












            10








            10








            1. The -c option allows programs to run commands. 
              It’s a lot easier to fork and do



              execl("/bin/sh", "sh", "-c", "date | od -cb && ps > ps.out", NULL);


              than it is to fork, create a pipe, fork again,
              call execl in each child, call wait, check the exit status,
              fork again, call close(1), open the file,
              ensure that it is open on file descriptor 1, and do another execl
              I believe that this was the reason why the option was created
              in the first place.



              The system() library function runs a command by the above method.



            2. It provides a way to take an arbitrarily complex command
              and make it look like a simple command. 
              This is useful with programs that run a user-specified command,
              such as find … -exec or xargs
              But you already knew that; it was part of the answer to your question,
              How to specify a compound command as an argument to another command?


            3. It can come in handy
              if you’re running an interactive shell other than bash. 
              Conversely, if you are running bash, you can use this syntax



              $ ash -c "command"

               
              $ csh -c "command"

               
              $ dash -c "command"

               
              $ zsh -c "command"


              to run one command in another shell,
              as all of those shells also recognize the -c option. 
              Of course you could achieve the same result with



              $ ash
              ash$ command

              ash$ exit
               
              $ csh
              csh$ command

              csh$ exit
               
              $ dash
              dash$ command

              dash$ exit
               
              $ zsh
              zsh$ command

              zsh$ exit


              I used ash$ , etc., to illustrate the prompts from the different shells;
              you probably wouldn’t actually get those.




            4. It can come in handy
              if you want to run one command in a “fresh” bash shell; for example,



              $ ls -lA
              total 0
              -rw-r--r-- 1 gman gman 0 Apr 14 20:16 .file1
              -rw-r--r-- 1 gman gman 0 Apr 14 20:16 file2

              $ echo *
              file2

              $ shopt -s dotglob

              $ echo *
              .file1 file2

              $ bash -c "echo *"
              file2


              or



              $ type shift
              shift is a shell builtin

              $ alias shift=date

              $ type shift
              shift is aliased to ‘date’

              $ bash -c "type shift"
              shift is a shell builtin



            5. The above is a misleading over-simplification. 
              When bash is run with -c, it is considered a non-interactive shell,
              and it does not read ~/.bashrc, unless is -i specified.  So,



              $ type cp
              cp is aliased to ‘cp -i’ # Defined in ~/.bashrc
               
              $ cp .file1 file2
              cp: overwrite ‘file2’? n
               
              $ bash -c "cp .file1 file2"
              # Existing file is overwritten without confirmation!
              $ bash -c -i "cp .file1 file2"
              cp: overwrite ‘file2’? n


              You could use -ci, -i -c or -ic instead of -c -i.



              This probably applies to some extent to the other shells
              mentioned in paragraph 3, so the long form (i.e., the second form,
              which is actually exactly the same amount of typing) might be safer, especially if you have initialization/configuration files
              set up for those shells.




            6. As Wildcard explained, since you’re running a new process tree
              (a new shell process and, potentially, its child process(es)),
              changes to the environment made in the subshell
              cannot affect the parent shell (current directory,
              values of environment variables, function definitions, etc.) 
              Therefore, it’s hard to imagine a shell builtin command
              that would be useful when run by sh -c. 
              fg, bg, and jobs cannot affect or access background jobs
              started by the parent shell, nor can wait wait for them. 
              sh -c "exec some_program" is essentially equivalent
              to just running some_program the normal way,
              directly from the interactive shell. 
              sh -c exit is a big waste of time. 
              ulimit and umask could change the system settings
              for the child process, and then exit without exercising them.



              Just about the only builtin command that would be functional
              in a sh -c context is kill
              Of course, the commands that only produce output
              (echo, printf, pwd and type) are unaffected,
              and, if you write a file, that will persist.



            7. Of course you can use a builtin in conjunction with
              an external command; e.g.,

              sh -c "cd some_directory; some_program"


              but you can achieve essentially the same effect with a normal subshell:

              (cd some_directory; some_program)


              which is more efficient. 
              The same (both parts) can be said for something like

              sh -c "umask 77; some_program"


              or ulimit (or shopt). 
              And since you can put an arbitrarily complex command after -c
              up to the complexity of a full-blown shell script —
              you might have occasion to use any of the repertoire of builtins;
              e.g., source, read, export, times, set and unset, etc.





            share|improve this answer
















            1. The -c option allows programs to run commands. 
              It’s a lot easier to fork and do



              execl("/bin/sh", "sh", "-c", "date | od -cb && ps > ps.out", NULL);


              than it is to fork, create a pipe, fork again,
              call execl in each child, call wait, check the exit status,
              fork again, call close(1), open the file,
              ensure that it is open on file descriptor 1, and do another execl
              I believe that this was the reason why the option was created
              in the first place.



              The system() library function runs a command by the above method.



            2. It provides a way to take an arbitrarily complex command
              and make it look like a simple command. 
              This is useful with programs that run a user-specified command,
              such as find … -exec or xargs
              But you already knew that; it was part of the answer to your question,
              How to specify a compound command as an argument to another command?


            3. It can come in handy
              if you’re running an interactive shell other than bash. 
              Conversely, if you are running bash, you can use this syntax



              $ ash -c "command"

               
              $ csh -c "command"

               
              $ dash -c "command"

               
              $ zsh -c "command"


              to run one command in another shell,
              as all of those shells also recognize the -c option. 
              Of course you could achieve the same result with



              $ ash
              ash$ command

              ash$ exit
               
              $ csh
              csh$ command

              csh$ exit
               
              $ dash
              dash$ command

              dash$ exit
               
              $ zsh
              zsh$ command

              zsh$ exit


              I used ash$ , etc., to illustrate the prompts from the different shells;
              you probably wouldn’t actually get those.




            4. It can come in handy
              if you want to run one command in a “fresh” bash shell; for example,



              $ ls -lA
              total 0
              -rw-r--r-- 1 gman gman 0 Apr 14 20:16 .file1
              -rw-r--r-- 1 gman gman 0 Apr 14 20:16 file2

              $ echo *
              file2

              $ shopt -s dotglob

              $ echo *
              .file1 file2

              $ bash -c "echo *"
              file2


              or



              $ type shift
              shift is a shell builtin

              $ alias shift=date

              $ type shift
              shift is aliased to ‘date’

              $ bash -c "type shift"
              shift is a shell builtin



            5. The above is a misleading over-simplification. 
              When bash is run with -c, it is considered a non-interactive shell,
              and it does not read ~/.bashrc, unless is -i specified.  So,



              $ type cp
              cp is aliased to ‘cp -i’ # Defined in ~/.bashrc
               
              $ cp .file1 file2
              cp: overwrite ‘file2’? n
               
              $ bash -c "cp .file1 file2"
              # Existing file is overwritten without confirmation!
              $ bash -c -i "cp .file1 file2"
              cp: overwrite ‘file2’? n


              You could use -ci, -i -c or -ic instead of -c -i.



              This probably applies to some extent to the other shells
              mentioned in paragraph 3, so the long form (i.e., the second form,
              which is actually exactly the same amount of typing) might be safer, especially if you have initialization/configuration files
              set up for those shells.




            6. As Wildcard explained, since you’re running a new process tree
              (a new shell process and, potentially, its child process(es)),
              changes to the environment made in the subshell
              cannot affect the parent shell (current directory,
              values of environment variables, function definitions, etc.) 
              Therefore, it’s hard to imagine a shell builtin command
              that would be useful when run by sh -c. 
              fg, bg, and jobs cannot affect or access background jobs
              started by the parent shell, nor can wait wait for them. 
              sh -c "exec some_program" is essentially equivalent
              to just running some_program the normal way,
              directly from the interactive shell. 
              sh -c exit is a big waste of time. 
              ulimit and umask could change the system settings
              for the child process, and then exit without exercising them.



              Just about the only builtin command that would be functional
              in a sh -c context is kill
              Of course, the commands that only produce output
              (echo, printf, pwd and type) are unaffected,
              and, if you write a file, that will persist.



            7. Of course you can use a builtin in conjunction with
              an external command; e.g.,

              sh -c "cd some_directory; some_program"


              but you can achieve essentially the same effect with a normal subshell:

              (cd some_directory; some_program)


              which is more efficient. 
              The same (both parts) can be said for something like

              sh -c "umask 77; some_program"


              or ulimit (or shopt). 
              And since you can put an arbitrarily complex command after -c
              up to the complexity of a full-blown shell script —
              you might have occasion to use any of the repertoire of builtins;
              e.g., source, read, export, times, set and unset, etc.






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 2 days ago

























            answered Apr 15 '16 at 2:41









            G-ManG-Man

            13.6k93770




            13.6k93770












            • +1 except I think you go too far on builtins. To be clear echo printf type pwd are builtins; so are set shopt shift read readarray mapfile trap declare/typeset export local let readonly unset which don't affect the parent but may still be useful inside a moderately complicated -c.

              – dave_thompson_085
              Apr 15 '16 at 8:06











            • What is your point?  Did you read my 6th bullet, where I said that builtins are useful in conjunction with external command(s)?  Are you saying that I should give more examples in bullet #6?

              – G-Man
              Apr 15 '16 at 8:56











            • Thanks. Someone said that your reply also answered another question, but is that true?

              – Tim
              Apr 15 '16 at 15:53











            • @Tim: What question?  I see five question marks in that “question”.  OK, I’m kidding — a little.  What are you still unsure about?  I showed an example of sh -c being used with a complex command line including three programs, a pipe, a &&, and a redirection; I showed an example of it being used with a compound command line including a cd, a ;, and a program; I showed an example of it being used with exec; and I said it could be used with builtins like echo, kill, printf, pwd and type (and also exit, ulimit, and umask).  What more do you want to know?  … (Cont’d)

              – G-Man
              Apr 15 '16 at 22:45











            • (Cont’d) …  If you mean “Does it mean execve() can operate on a script?”, (1) that has nothing to do with bash -c, and (2) what research have you done?  The execve man page answers this, and a search of this site yields this, this, this, this, this, and this.

              – G-Man
              Apr 15 '16 at 22:45

















            • +1 except I think you go too far on builtins. To be clear echo printf type pwd are builtins; so are set shopt shift read readarray mapfile trap declare/typeset export local let readonly unset which don't affect the parent but may still be useful inside a moderately complicated -c.

              – dave_thompson_085
              Apr 15 '16 at 8:06











            • What is your point?  Did you read my 6th bullet, where I said that builtins are useful in conjunction with external command(s)?  Are you saying that I should give more examples in bullet #6?

              – G-Man
              Apr 15 '16 at 8:56











            • Thanks. Someone said that your reply also answered another question, but is that true?

              – Tim
              Apr 15 '16 at 15:53











            • @Tim: What question?  I see five question marks in that “question”.  OK, I’m kidding — a little.  What are you still unsure about?  I showed an example of sh -c being used with a complex command line including three programs, a pipe, a &&, and a redirection; I showed an example of it being used with a compound command line including a cd, a ;, and a program; I showed an example of it being used with exec; and I said it could be used with builtins like echo, kill, printf, pwd and type (and also exit, ulimit, and umask).  What more do you want to know?  … (Cont’d)

              – G-Man
              Apr 15 '16 at 22:45











            • (Cont’d) …  If you mean “Does it mean execve() can operate on a script?”, (1) that has nothing to do with bash -c, and (2) what research have you done?  The execve man page answers this, and a search of this site yields this, this, this, this, this, and this.

              – G-Man
              Apr 15 '16 at 22:45
















            +1 except I think you go too far on builtins. To be clear echo printf type pwd are builtins; so are set shopt shift read readarray mapfile trap declare/typeset export local let readonly unset which don't affect the parent but may still be useful inside a moderately complicated -c.

            – dave_thompson_085
            Apr 15 '16 at 8:06





            +1 except I think you go too far on builtins. To be clear echo printf type pwd are builtins; so are set shopt shift read readarray mapfile trap declare/typeset export local let readonly unset which don't affect the parent but may still be useful inside a moderately complicated -c.

            – dave_thompson_085
            Apr 15 '16 at 8:06













            What is your point?  Did you read my 6th bullet, where I said that builtins are useful in conjunction with external command(s)?  Are you saying that I should give more examples in bullet #6?

            – G-Man
            Apr 15 '16 at 8:56





            What is your point?  Did you read my 6th bullet, where I said that builtins are useful in conjunction with external command(s)?  Are you saying that I should give more examples in bullet #6?

            – G-Man
            Apr 15 '16 at 8:56













            Thanks. Someone said that your reply also answered another question, but is that true?

            – Tim
            Apr 15 '16 at 15:53





            Thanks. Someone said that your reply also answered another question, but is that true?

            – Tim
            Apr 15 '16 at 15:53













            @Tim: What question?  I see five question marks in that “question”.  OK, I’m kidding — a little.  What are you still unsure about?  I showed an example of sh -c being used with a complex command line including three programs, a pipe, a &&, and a redirection; I showed an example of it being used with a compound command line including a cd, a ;, and a program; I showed an example of it being used with exec; and I said it could be used with builtins like echo, kill, printf, pwd and type (and also exit, ulimit, and umask).  What more do you want to know?  … (Cont’d)

            – G-Man
            Apr 15 '16 at 22:45





            @Tim: What question?  I see five question marks in that “question”.  OK, I’m kidding — a little.  What are you still unsure about?  I showed an example of sh -c being used with a complex command line including three programs, a pipe, a &&, and a redirection; I showed an example of it being used with a compound command line including a cd, a ;, and a program; I showed an example of it being used with exec; and I said it could be used with builtins like echo, kill, printf, pwd and type (and also exit, ulimit, and umask).  What more do you want to know?  … (Cont’d)

            – G-Man
            Apr 15 '16 at 22:45













            (Cont’d) …  If you mean “Does it mean execve() can operate on a script?”, (1) that has nothing to do with bash -c, and (2) what research have you done?  The execve man page answers this, and a search of this site yields this, this, this, this, this, and this.

            – G-Man
            Apr 15 '16 at 22:45





            (Cont’d) …  If you mean “Does it mean execve() can operate on a script?”, (1) that has nothing to do with bash -c, and (2) what research have you done?  The execve man page answers this, and a search of this site yields this, this, this, this, this, and this.

            – G-Man
            Apr 15 '16 at 22:45













            5














            Running bash -c "my command here" vs. just running my command here is primarily different in that the former starts a subshell and the latter runs the commands in the current shell.



            As far as built-in commands vs. external commands, it doesn't really relate—anything you can run in the current shell, you can run in a subshell.



            There are a number of differences in the effects, however:



            • Changes to the environment made in the subshell cannot affect the parent shell (current directory, values of environment variables, function definitions, etc.)

            • Variables set in the parent shell that have not been exported will be unavailable in the subshell.

            This is far from an exhaustive list of differences, but it contains the key point: you are running a different process with bash -c; it's not the same process as your original shell.



            There is also a performance hit incurred by spawning a subshell; this is most relevant if your script is run frequently, or if your command is inside a loop of some kind.






            share|improve this answer


















            • 1





              FYI, I quoted your answer in my answer.  I tried to ping you from there, knowing that that doesn't work.

              – G-Man
              Apr 15 '16 at 2:46















            5














            Running bash -c "my command here" vs. just running my command here is primarily different in that the former starts a subshell and the latter runs the commands in the current shell.



            As far as built-in commands vs. external commands, it doesn't really relate—anything you can run in the current shell, you can run in a subshell.



            There are a number of differences in the effects, however:



            • Changes to the environment made in the subshell cannot affect the parent shell (current directory, values of environment variables, function definitions, etc.)

            • Variables set in the parent shell that have not been exported will be unavailable in the subshell.

            This is far from an exhaustive list of differences, but it contains the key point: you are running a different process with bash -c; it's not the same process as your original shell.



            There is also a performance hit incurred by spawning a subshell; this is most relevant if your script is run frequently, or if your command is inside a loop of some kind.






            share|improve this answer


















            • 1





              FYI, I quoted your answer in my answer.  I tried to ping you from there, knowing that that doesn't work.

              – G-Man
              Apr 15 '16 at 2:46













            5












            5








            5







            Running bash -c "my command here" vs. just running my command here is primarily different in that the former starts a subshell and the latter runs the commands in the current shell.



            As far as built-in commands vs. external commands, it doesn't really relate—anything you can run in the current shell, you can run in a subshell.



            There are a number of differences in the effects, however:



            • Changes to the environment made in the subshell cannot affect the parent shell (current directory, values of environment variables, function definitions, etc.)

            • Variables set in the parent shell that have not been exported will be unavailable in the subshell.

            This is far from an exhaustive list of differences, but it contains the key point: you are running a different process with bash -c; it's not the same process as your original shell.



            There is also a performance hit incurred by spawning a subshell; this is most relevant if your script is run frequently, or if your command is inside a loop of some kind.






            share|improve this answer













            Running bash -c "my command here" vs. just running my command here is primarily different in that the former starts a subshell and the latter runs the commands in the current shell.



            As far as built-in commands vs. external commands, it doesn't really relate—anything you can run in the current shell, you can run in a subshell.



            There are a number of differences in the effects, however:



            • Changes to the environment made in the subshell cannot affect the parent shell (current directory, values of environment variables, function definitions, etc.)

            • Variables set in the parent shell that have not been exported will be unavailable in the subshell.

            This is far from an exhaustive list of differences, but it contains the key point: you are running a different process with bash -c; it's not the same process as your original shell.



            There is also a performance hit incurred by spawning a subshell; this is most relevant if your script is run frequently, or if your command is inside a loop of some kind.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Apr 15 '16 at 0:00









            WildcardWildcard

            23.2k1067171




            23.2k1067171







            • 1





              FYI, I quoted your answer in my answer.  I tried to ping you from there, knowing that that doesn't work.

              – G-Man
              Apr 15 '16 at 2:46












            • 1





              FYI, I quoted your answer in my answer.  I tried to ping you from there, knowing that that doesn't work.

              – G-Man
              Apr 15 '16 at 2:46







            1




            1





            FYI, I quoted your answer in my answer.  I tried to ping you from there, knowing that that doesn't work.

            – G-Man
            Apr 15 '16 at 2:46





            FYI, I quoted your answer in my answer.  I tried to ping you from there, knowing that that doesn't work.

            – G-Man
            Apr 15 '16 at 2:46











            2














            The -c option basically runs a mini-shell script provided as a CLI argument rather than a file.



            $ bash -c the_script the_scriptname 1 2 3 


            is virtually equivalent to:



            $ echo the_script > the_scriptname
            $ bash the_scriptname 1 2 3
            $ rm the_scriptname


            As you can see from:



            $ bash -c 'printf " ->%sn" $0 "$@"; echo $-;' scriptname 1 2 3
            ->scriptname
            ->1
            ->2
            ->3
            hBc


            (In English:
            $0 == scriptname; $@ == (1 2 3);
            and bash will:
            hash commands; perform Brace expansion, and it has been run with the -c flag)



            and:



             $ echo 'printf " ->%sn" $0 "$@"; echo $-;' > scriptname
            $ bash scriptname 1 2 3
            ->scriptname
            ->1
            ->2
            ->3
            hB





            share|improve this answer



























              2














              The -c option basically runs a mini-shell script provided as a CLI argument rather than a file.



              $ bash -c the_script the_scriptname 1 2 3 


              is virtually equivalent to:



              $ echo the_script > the_scriptname
              $ bash the_scriptname 1 2 3
              $ rm the_scriptname


              As you can see from:



              $ bash -c 'printf " ->%sn" $0 "$@"; echo $-;' scriptname 1 2 3
              ->scriptname
              ->1
              ->2
              ->3
              hBc


              (In English:
              $0 == scriptname; $@ == (1 2 3);
              and bash will:
              hash commands; perform Brace expansion, and it has been run with the -c flag)



              and:



               $ echo 'printf " ->%sn" $0 "$@"; echo $-;' > scriptname
              $ bash scriptname 1 2 3
              ->scriptname
              ->1
              ->2
              ->3
              hB





              share|improve this answer

























                2












                2








                2







                The -c option basically runs a mini-shell script provided as a CLI argument rather than a file.



                $ bash -c the_script the_scriptname 1 2 3 


                is virtually equivalent to:



                $ echo the_script > the_scriptname
                $ bash the_scriptname 1 2 3
                $ rm the_scriptname


                As you can see from:



                $ bash -c 'printf " ->%sn" $0 "$@"; echo $-;' scriptname 1 2 3
                ->scriptname
                ->1
                ->2
                ->3
                hBc


                (In English:
                $0 == scriptname; $@ == (1 2 3);
                and bash will:
                hash commands; perform Brace expansion, and it has been run with the -c flag)



                and:



                 $ echo 'printf " ->%sn" $0 "$@"; echo $-;' > scriptname
                $ bash scriptname 1 2 3
                ->scriptname
                ->1
                ->2
                ->3
                hB





                share|improve this answer













                The -c option basically runs a mini-shell script provided as a CLI argument rather than a file.



                $ bash -c the_script the_scriptname 1 2 3 


                is virtually equivalent to:



                $ echo the_script > the_scriptname
                $ bash the_scriptname 1 2 3
                $ rm the_scriptname


                As you can see from:



                $ bash -c 'printf " ->%sn" $0 "$@"; echo $-;' scriptname 1 2 3
                ->scriptname
                ->1
                ->2
                ->3
                hBc


                (In English:
                $0 == scriptname; $@ == (1 2 3);
                and bash will:
                hash commands; perform Brace expansion, and it has been run with the -c flag)



                and:



                 $ echo 'printf " ->%sn" $0 "$@"; echo $-;' > scriptname
                $ bash scriptname 1 2 3
                ->scriptname
                ->1
                ->2
                ->3
                hB






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Apr 14 '16 at 23:42









                PSkocikPSkocik

                18.4k553100




                18.4k553100





















                    -1















                    -c string



                    If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to
                    the positional parameters, starting with $0.




                    This will solve your questions I guess






                    share|improve this answer























                    • thanks. can you explain explicitly to my questions?

                      – Tim
                      Apr 14 '16 at 23:27















                    -1















                    -c string



                    If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to
                    the positional parameters, starting with $0.




                    This will solve your questions I guess






                    share|improve this answer























                    • thanks. can you explain explicitly to my questions?

                      – Tim
                      Apr 14 '16 at 23:27













                    -1












                    -1








                    -1








                    -c string



                    If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to
                    the positional parameters, starting with $0.




                    This will solve your questions I guess






                    share|improve this answer














                    -c string



                    If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to
                    the positional parameters, starting with $0.




                    This will solve your questions I guess







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Apr 14 '16 at 23:21









                    rɑːdʒɑrɑːdʒɑ

                    2,66472753




                    2,66472753












                    • thanks. can you explain explicitly to my questions?

                      – Tim
                      Apr 14 '16 at 23:27

















                    • thanks. can you explain explicitly to my questions?

                      – Tim
                      Apr 14 '16 at 23:27
















                    thanks. can you explain explicitly to my questions?

                    – Tim
                    Apr 14 '16 at 23:27





                    thanks. can you explain explicitly to my questions?

                    – Tim
                    Apr 14 '16 at 23:27

















                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Unix & Linux Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f276581%2fwhat-is-the-difference-between-running-a-command-directly-and-with-bash-c%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Àrd-bhaile Cathair chruinne/Baile mòr cruinne | Artagailean ceangailte | Clàr-taice na seòladaireachd

                    대한민국 목차 국명 지리 역사 정치 국방 경제 사회 문화 국제 순위 관련 항목 각주 외부 링크 둘러보기 메뉴북위 37° 34′ 08″ 동경 126° 58′ 36″ / 북위 37.568889° 동경 126.976667°  / 37.568889; 126.976667ehThe Korean Repository문단을 편집문단을 편집추가해Clarkson PLC 사Report for Selected Countries and Subjects-Korea“Human Development Index and its components: P.198”“http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EA%B5%AD%EA%B8%B0%EB%B2%95”"한국은 국제법상 한반도 유일 합법정부 아니다" - 오마이뉴스 모바일Report for Selected Countries and Subjects: South Korea격동의 역사와 함께한 조선일보 90년 : 조선일보 인수해 혁신시킨 신석우, 임시정부 때는 '대한민국' 국호(國號) 정해《우리가 몰랐던 우리 역사: 나라 이름의 비밀을 찾아가는 역사 여행》“남북 공식호칭 ‘남한’‘북한’으로 쓴다”“Corea 대 Korea, 누가 이긴 거야?”국내기후자료 - 한국[김대중 前 대통령 서거] 과감한 구조개혁 'DJ노믹스'로 최단기간 환란극복 :: 네이버 뉴스“이라크 "韓-쿠르드 유전개발 MOU 승인 안해"(종합)”“해외 우리국민 추방사례 43%가 일본”차기전차 K2'흑표'의 세계 최고 전력 분석, 쿠키뉴스 엄기영, 2007-03-02두산인프라, 헬기잡는 장갑차 'K21'...내년부터 공급, 고뉴스 이대준, 2008-10-30과거 내용 찾기mk 뉴스 - 구매력 기준으로 보면 한국 1인당 소득 3만弗과거 내용 찾기"The N-11: More Than an Acronym"Archived조선일보 최우석, 2008-11-01Global 500 2008: Countries - South Korea“몇년째 '시한폭탄'... 가계부채, 올해는 터질까”가구당 부채 5000만원 처음 넘어서“‘빚’으로 내몰리는 사회.. 위기의 가계대출”“[경제365] 공공부문 부채 급증…800조 육박”“"소득 양극화 다소 완화...불평등은 여전"”“공정사회·공생발전 한참 멀었네”iSuppli,08年2QのDRAMシェア・ランキングを発表(08/8/11)South Korea dominates shipbuilding industry | Stock Market News & Stocks to Watch from StraightStocks한국 자동차 생산, 3년 연속 세계 5위자동차수출 '현대-삼성 웃고 기아-대우-쌍용은 울고' 과거 내용 찾기동반성장위 창립 1주년 맞아Archived"중기적합 3개업종 합의 무시한 채 선정"李대통령, 사업 무분별 확장 소상공인 생계 위협 질타삼성-LG, 서민업종인 빵·분식사업 잇따라 철수상생은 뒷전…SSM ‘몸집 불리기’ 혈안Archived“경부고속도에 '아시안하이웨이' 표지판”'철의 실크로드' 앞서 '말(言)의 실크로드'부터, 프레시안 정창현, 2008-10-01“'서울 지하철은 안전한가?'”“서울시 “올해 안에 모든 지하철역 스크린도어 설치””“부산지하철 1,2호선 승강장 안전펜스 설치 완료”“전교조, 정부 노조 통계서 처음 빠져”“[Weekly BIZ] 도요타 '제로 이사회'가 리콜 사태 불러들였다”“S Korea slams high tuition costs”““정치가 여론 양극화 부채질… 합리주의 절실””“〈"`촛불집회'는 민주주의의 질적 변화 상징"〉”““촛불집회가 민주주의 왜곡 초래””“국민 65%, "한국 노사관계 대립적"”“한국 국가경쟁력 27위‥노사관계 '꼴찌'”“제대로 형성되지 않은 대한민국 이념지형”“[신년기획-갈등의 시대] 갈등지수 OECD 4위…사회적 손실 GDP 27% 무려 300조”“2012 총선-대선의 키워드는 '국민과 소통'”“한국 삶의 질 27위, 2000년과 2008년 연속 하위권 머물러”“[해피 코리아] 행복점수 68점…해외 평가선 '낙제점'”“한국 어린이·청소년 행복지수 3년 연속 OECD ‘꼴찌’”“한국 이혼율 OECD중 8위”“[통계청] 한국 이혼율 OECD 4위”“오피니언 [이렇게 생각한다] `부부의 날` 에 돌아본 이혼율 1위 한국”“Suicide Rates by Country, Global Health Observatory Data Repository.”“1. 또 다른 차별”“오피니언 [편집자에게] '왕따'와 '패거리 정치' 심리는 닮은꼴”“[미래한국리포트] 무한경쟁에 빠진 대한민국”“대학생 98% "외모가 경쟁력이라는 말 동의"”“특급호텔 웨딩·200만원대 유모차… "남보다 더…" 호화病, 고질병 됐다”“[스트레스 공화국] ① 경쟁사회, 스트레스 쌓인다”““매일 30여명 자살 한국, 의사보다 무속인에…””“"자살 부르는 '우울증', 환자 중 85% 치료 안 받아"”“정신병원을 가다”“대한민국도 ‘묻지마 범죄’,안전지대 아니다”“유엔 "학생 '성적 지향'에 따른 차별 금지하라"”“유엔아동권리위원회 보고서 및 번역본 원문”“고졸 성공스토리 담은 '제빵왕 김탁구' 드라마 나온다”“‘빛 좋은 개살구’ 고졸 취업…실습 대신 착취”원본 문서“정신건강, 사회적 편견부터 고쳐드립니다”‘소통’과 ‘행복’에 목 마른 사회가 잠들어 있던 ‘심리학’ 깨웠다“[포토] 사유리-곽금주 교수의 유쾌한 심리상담”“"올해 한국인 평균 영화관람횟수 세계 1위"(종합)”“[게임연중기획] 게임은 문화다-여가활동 1순위 게임”“영화속 ‘영어 지상주의’ …“왠지 씁쓸한데””“2월 `신문 부수 인증기관` 지정..방송법 후속작업”“무료신문 성장동력 ‘차별성’과 ‘갈등해소’”대한민국 국회 법률지식정보시스템"Pew Research Center's Religion & Public Life Project: South Korea"“amp;vwcd=MT_ZTITLE&path=인구·가구%20>%20인구총조사%20>%20인구부문%20>%20 총조사인구(2005)%20>%20전수부문&oper_YN=Y&item=&keyword=종교별%20인구& amp;lang_mode=kor&list_id= 2005년 통계청 인구 총조사”원본 문서“한국인이 좋아하는 취미와 운동 (2004-2009)”“한국인이 좋아하는 취미와 운동 (2004-2014)”Archived“한국, `부분적 언론자유국' 강등〈프리덤하우스〉”“국경없는기자회 "한국, 인터넷감시 대상국"”“한국, 조선산업 1위 유지(S. Korea Stays Top Shipbuilding Nation) RZD-Partner Portal”원본 문서“한국, 4년 만에 ‘선박건조 1위’”“옛 마산시,인터넷속도 세계 1위”“"한국 초고속 인터넷망 세계1위"”“인터넷·휴대폰 요금, 외국보다 훨씬 비싸”“한국 관세행정 6년 연속 세계 '1위'”“한국 교통사고 사망자 수 OECD 회원국 중 2위”“결핵 후진국' 한국, 환자가 급증한 이유는”“수술은 신중해야… 자칫하면 생명 위협”대한민국분류대한민국의 지도대한민국 정부대표 다국어포털대한민국 전자정부대한민국 국회한국방송공사about korea and information korea브리태니커 백과사전(한국편)론리플래닛의 정보(한국편)CIA의 세계 정보(한국편)마리암 부디아 (Mariam Budia),『한국: 하늘이 내린 한 폭의 그림』, 서울: 트랜스라틴 19호 (2012년 3월)대한민국ehehehehehehehehehehehehehehWorldCat132441370n791268020000 0001 2308 81034078029-6026373548cb11863345f(데이터)00573706ge128495

                    Cannot Extend partition with GParted The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsCan't increase partition size with GParted?GParted doesn't recognize the unallocated space after my current partitionWhat is the best way to add unallocated space located before to Ubuntu 12.04 partition with GParted live?I can't figure out how to extend my Arch home partition into free spaceGparted Linux Mint 18.1 issueTrying to extend but swap partition is showing as Unknown in Gparted, shows proper from fdiskRearrange partitions in gparted to extend a partitionUnable to extend partition even though unallocated space is next to it using GPartedAllocate free space to root partitiongparted: how to merge unallocated space with a partition