su를 사용한 bash 서브 쉘 명령 실행 순서

염소

일반적으로 bash는 세미콜론으로 구분 될 때 순서대로 명령을 실행할 것으로 예상합니다.

예를 들어, cmd1은 다음에서 cmd2보다 먼저 실행됩니다. cmd1;cmd2

그러나 나는 이것이 사실이 아닌 시나리오를 보았습니다.

echo 'my password' | sudo -S su -c "echo a 1>&2 ; $(echo b 1>&2)" root

나는 출력이

a
b

하지만 실제로

b
a

왜?

su 명령에 대한 c 플래그와 관련이 있습니까? 두 번째 명령을 서브 쉘에 넣을 때만 발생하는 것 같습니다.

IO 리디렉션이 범인이 아니라는 점에 유의하십시오. 문제를 쉽게 설명하기 위해 추가했습니다. a cd및 a와 같은 다른 명령을 넣으면 stat실제로 순서가 잘못되어 실행되는 것을 볼 수 있습니다.

멜 포민
$ echo "hello $(echo world)"
hello world

$( ... )내부에서 명령을 실행하고 수집 된 출력을 대체합니다. 즉, 위의 명령이 실행 echo "hello world"됩니다.

비슷하게,

sudo -S su -c "echo a 1>&2 ; $(echo b)"

뛰게 될거야

sudo -S su -c "echo a 1>&2 ; b"

그러나 $(echo b 1>&2)명령 b을 사용하면 stderr (및 stdout에 아무것도 기록 하지 않음)에 기록하므로 셸이 b화면에 나타나는 문자열을 처리하는 동안 전체 $( ... )구성이 아무것도 변경되지 않습니다 (표준 출력에 아무것도 기록하지 않기 때문에).

결국 실행되는 것은

sudo -S su -c "echo a 1>&2 ; " root

당신이 원하는 것은 서브 쉘에서 명령을 실행하는 것 ( ... )이라면 $( ... ).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

--rcfile 및 -c를 사용하여 새 bash 쉘에서 명령 실행

분류에서Dev

피쉬 쉘에서 bash 명령 실행

분류에서Dev

`bash` 명령을 실행할 때 서브 쉘이 생성되지 않습니까?

분류에서Dev

단일 명령이 파이프 라인을 구성 할 수 있으므로 bash의 간단한 명령이 서브 쉘에서 실행됩니까?

분류에서Dev

Bash-현재 쉘에서 명령 실행

분류에서Dev

Bash-현재 쉘에서 명령 실행

분류에서Dev

쉘 스크립트 변수에서 bash 명령 실행 오류

분류에서Dev

새 bash 쉘 프로세스에서 명령 실행

분류에서Dev

피쉬 쉘에서 bash 명령으로 for 루프 실행

분류에서Dev

서브 쉘을 사용하지 않고 쉘 명령 대체를 수행 할 수 있습니까?

분류에서Dev

PHP 쉘 명령에서 Cassandra 실행 (datastax php-driver 사용)

분류에서Dev

C에서 쉘 명령으로 사용자 입력 실행

분류에서Dev

서브 쉘없이 여러 명령을 사용하여 bash에서 false 평가

분류에서Dev

한 줄 명령 wierd tty에서 ssh를 통해 bash 실행

분류에서Dev

bash 서브 쉘을 시작하고 스크립트에서 명령을 실행하십시오.

분류에서Dev

ERL : 쉘에서 erl 명령 실행

분류에서Dev

Makefile 규칙에서 쉘 명령 실행

분류에서Dev

현재 명령 중간에서 서브 쉘 실행

분류에서Dev

bash에서 su 명령 사용 감지

분류에서Dev

쉘 스크립트를 사용하여 병렬로 여러 서버에서 명령 실행

분류에서Dev

쉘 스크립트를 사용하여 병렬로 여러 서버에서 명령 실행

분류에서Dev

중괄호를 사용한 Bash 서브 쉘 생성

분류에서Dev

중괄호를 사용한 Bash 서브 쉘 생성

분류에서Dev

성공적인 서브 쉘 명령에 대한 Bash 테스트가 false를 리턴 함

분류에서Dev

브라우저에서 쉘 명령 실행

분류에서Dev

파이프 라인 후 여러 명령 및 서브 쉘 실행

분류에서Dev

PLINK를 사용하여 Windows에서 ktutil 명령으로 쉘 스크립트를 실행할 수 없습니다.

분류에서Dev

쉘 스크립트를 사용하여 쉘 명령 실행

분류에서Dev

공백이있는 인수를 사용하여 bash에서 명령 실행

Related 관련 기사

  1. 1

    --rcfile 및 -c를 사용하여 새 bash 쉘에서 명령 실행

  2. 2

    피쉬 쉘에서 bash 명령 실행

  3. 3

    `bash` 명령을 실행할 때 서브 쉘이 생성되지 않습니까?

  4. 4

    단일 명령이 파이프 라인을 구성 할 수 있으므로 bash의 간단한 명령이 서브 쉘에서 실행됩니까?

  5. 5

    Bash-현재 쉘에서 명령 실행

  6. 6

    Bash-현재 쉘에서 명령 실행

  7. 7

    쉘 스크립트 변수에서 bash 명령 실행 오류

  8. 8

    새 bash 쉘 프로세스에서 명령 실행

  9. 9

    피쉬 쉘에서 bash 명령으로 for 루프 실행

  10. 10

    서브 쉘을 사용하지 않고 쉘 명령 대체를 수행 할 수 있습니까?

  11. 11

    PHP 쉘 명령에서 Cassandra 실행 (datastax php-driver 사용)

  12. 12

    C에서 쉘 명령으로 사용자 입력 실행

  13. 13

    서브 쉘없이 여러 명령을 사용하여 bash에서 false 평가

  14. 14

    한 줄 명령 wierd tty에서 ssh를 통해 bash 실행

  15. 15

    bash 서브 쉘을 시작하고 스크립트에서 명령을 실행하십시오.

  16. 16

    ERL : 쉘에서 erl 명령 실행

  17. 17

    Makefile 규칙에서 쉘 명령 실행

  18. 18

    현재 명령 중간에서 서브 쉘 실행

  19. 19

    bash에서 su 명령 사용 감지

  20. 20

    쉘 스크립트를 사용하여 병렬로 여러 서버에서 명령 실행

  21. 21

    쉘 스크립트를 사용하여 병렬로 여러 서버에서 명령 실행

  22. 22

    중괄호를 사용한 Bash 서브 쉘 생성

  23. 23

    중괄호를 사용한 Bash 서브 쉘 생성

  24. 24

    성공적인 서브 쉘 명령에 대한 Bash 테스트가 false를 리턴 함

  25. 25

    브라우저에서 쉘 명령 실행

  26. 26

    파이프 라인 후 여러 명령 및 서브 쉘 실행

  27. 27

    PLINK를 사용하여 Windows에서 ktutil 명령으로 쉘 스크립트를 실행할 수 없습니다.

  28. 28

    쉘 스크립트를 사용하여 쉘 명령 실행

  29. 29

    공백이있는 인수를 사용하여 bash에서 명령 실행

뜨겁다태그

보관