"bash-"에서 "-"는 무엇을 의미합니까?


33

bash -다음 bash 쉘 코드에서 무엇을 의미합니까? 출력을 마지막 코드로 입력하는 데 사용되는 것 같습니다. 그렇다면 그냥 bash또는 로 쓸 수 xargs bash있습니까?

curl --silent --location https://rpm.nodesource.com/setup | bash -

답변:


36

확실치 않은 경우 소스 코드를 읽으십시오. =)

Bash 4.3, shell.c830 행parse_shell_options() : 기능 :

  /* A single `-' signals the end of options.  From the 4.3 BSD sh.
     An option `--' means the same thing; this is the standard
     getopt(3) meaning. */
  if (arg_string[0] == '-' &&
       (arg_string[1] == '\0' ||
         (arg_string[1] == '-' && arg_string[2] == '\0')))
    return (next_arg);

다시 말해, 더 이상 옵션-없다고 말하는 것입니다 . 명령 행에 단어가 더 있으면 단어가로 시작하더라도 파일 이름으로 취급됩니다 -.

물론 귀하의 예에서는 -어쨌든 아무것도 따르지 않으므로 완전히 중복됩니다. 즉, bash -와 정확히 동일합니다bash .


배쉬는 명령을 받는다

  1. 명령 행에 제공된 경우 스크립트 파일에서 또는
  2. stdin이 TTY가 아닌 경우 stdin에서 비 대화식으로 (예 : stdin은 파이프이므로 Bash는 해당 URL의 내용을 스크립트로 실행 함) 또는
  3. 표준 입력이 TTY 인 경우 대화식으로.

bash -Bash에게 표준 입력에서 명령을 읽 도록 지시 하는 것은 오해입니다 . 이 상태 입니다 귀하의 예제에서, 배쉬는 표준 입력에서 해당 명령을 읽을 사실, 그것은 그렇게 관계없이이되었는지 여부했을 -위에서 언급 한 바와 같이, 때문에, 명령 행에서 bash -동일하다 bash.

-stdin을 의미하지 않는 것을 더 설명하려면 다음을 고려하십시오.

  • cat명령은 -stdin 으로 해석하도록 설계되었습니다 . 예를 들면 다음과 같습니다.

    $ echo xxx | cat /etc/hosts - /etc/shells
    127.0.0.1 localhost
    xxx
    # /etc/shells: valid login shells
    /bin/sh
    /bin/dash
    /bin/bash
    /bin/rbash
    /bin/zsh
    /usr/bin/zsh
    /usr/bin/screen
    /bin/tcsh
    /usr/bin/tcsh
    /usr/bin/tmux
    /bin/ksh93
    
  • 대조적으로, /bin/date다음 /bin/hostname을 시도 하여 Bash를 실행할 수 없습니다 .

    $ echo date | bash - hostname
    /bin/hostname: /bin/hostname: cannot execute binary file
    

    오히려 /bin/hostname이진 gobbledygook이기 때문에 쉘 스크립트 파일 로 해석하려고 시도합니다 .

  • 둘 중 하나를 date +%s사용하여 실행할 수 없습니다 bash -.

    $ date +%s
    1448696965
    $ echo date | bash -
    Sat Nov 28 07:49:31 UTC 2015
    $ echo date | bash - +%s
    bash: +%s: No such file or directory
    

xargs bash대신 쓸 수 있습니까 ? 아니요 curl | xargs bash. 스크립트 내용을 명령 줄 인수로 사용하여 bash를 호출합니다. 내용의 첫 번째 단어가 첫 번째 인수이며 스크립트 파일 이름으로 잘못 해석 될 수 있습니다.


6
정답에 대한 찬성
geirha

실제로 : 맨 페이지의 말로An argument of - is equivalent to --.
steeldriver

정말로 xargs대신 실제로 사용하고 싶다면 (작은 입력 스크립트의 제한된 시나리오에서) | xargs bash -c; 그러나 실제로 이것은 유용하거나 관용적 인 사용이 아닙니다 xargs.
tripleee

@tripleee URL의 내용이 한 줄 이상의 내용이면 줄 바꿈과 다른 구분 기호가 모두 잘못되었을 수 있습니다.
200_Success

물론입니다.
tripleee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.