here 문자열을 사용하는 것보다 bash -c를 사용하는 이점은 무엇입니까?


11

bash -c 'some command'과잉 사용시 실제 이점이 있습니까?bash <<< 'some command'

그들은 같은 효과를 얻는 것처럼 보입니다.



@Patrick에게 감사드립니다. 게시하기 가장 좋은 장소가 어디인지 확실하지 않았습니다. 한편으로 이것은 Linux 질문이지만 다른 한편으로 bash는 일종의 스크립팅 언어이며 다른 사이트에는 더 많은 방문자가 있습니다. 이와 같은 경우 더 적절한 장소를 어디에 게시 하시겠습니까?
yosefrow

4
@yosefrow : 어느 사이트라도 괜찮을 것입니다 IMHO; 그러나 교차 게시는 독창적입니다 (두 사이트의 사람들에게 서로의 답변을 얻지 않고 질문에 시간을 보내도록 요청하고 있습니다).
ruakh

그런 다음 사이트 중 하나에서 게시물을 삭제하는 것이 적절합니까?
yosefrow

2
또 다른 작은 차이점은 bash -c '...'herestrings가없는 쉘에서 작동 한다는 것입니다. bash가 bash 쉘 내에서 호출된다고 가정하지만 항상 그런 것은 아닙니다.
Joel Cornett

답변:


21

bash -c 'some command'발신자의 표준 입력에 대한 액세스 권한을 유지하므로 read표준 입력에서 읽는 명령이 정상적으로 작동합니다. bash <<< 'some command'라인에 입력 전달, 그렇게되고 있음을 대체 bash -c cat하고 bash <<< cat다른 일을.

$ bash -c cat
abc
abc
^D
$ bash <<< cat
$

반면에 $'...'매우 신중한 경우 해당 기능을 사용하여 사용할 표준 입력을 제공 할 수 있습니다 .

$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$

나는 그것에 의존하고 싶지 않지만 때로는 편리 할 수 ​​있습니다.


bash -c또한 인수를 스크립트에 전달하고 $0설정할 수 있습니다.

bash -c 'some command' sh abc def

설정됩니다 $1abc$2def내부 some command.


3
구문 오류는 약간 다른 표현을 생성합니다. 주로 AFAIK가 bash -c언급 -c됩니다. 그것들을 추적하는 데 도움이 될 수 있으므로 완전히 무의미한 것은 아닙니다. bash <<< 'script'오류는 상위 스크립트의 오류와 유사합니다. bash -c 'script'그들은하지 않습니다. 라벨을 지정할 수도 있습니다 : bash -c 'script' label.
derobert

글쎄, bash <<< 'echo $1' /dev/stdin foo작동하고 인쇄합니다 foo. 설정 $0이 다소 제한적이지만.
ilkkachu 2018 년

bash <<< 'echo "$1"' /dev/stdin foo항상 작동하지는 않습니다. 내가 가지고 bash <<< 'echo "$1"' -s foo작업에.
G-Man, 'Reinstate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.