다음과 같이 BASH 이외의 스크립트 (PHP 스크립트)에서 여러 파이프 쉘 명령을 실행해야합니다.
command1 | command2 | command3
따라서 command1
0이 아닌 종료 코드로 실패하면 서로 명령이 실패합니다. 지금까지 내가 생각해 낸 것은 다음과 같습니다.
set -o pipefail && command1 | command2 | command3
그러나 터미널에서 제대로 실행되지만 스크립트에서 실행하면 다음과 같이 생성됩니다.
sh : 1 : 설정 : 잘못된 옵션 -o pipefail
/bin/sh set -o pipefail
말합니다 . 내가 올바르게 테스트했으면 좋겠다. 시스템은 우분투 12입니다./bin/sh: 0: Can't open set
sudo
/bin/sh -c "set -o pipefail"
; 셸은 현재 디렉토리에서 스크립트를 실행하려고 set
했으나 찾지 못했습니다.
/bin/sh -c "set -o pipefail"
는 작동 bash -c "set -o pipefail"
하지 않습니다.
/bin/sh
인식하지 못하는 스크립트가 실행된다는 것 입니다 set -o pipefail
. 결과적으로 스크립트 /bin/bash
대신에 스크립트가 실행되도록해야합니다 /bin/sh
. 또는 확신이 있다면 용감하고 어리석은 사람 은 현재 연결된 쉘 /bin/sh
이나 사본 /bin/bash
대신 링크 또는 사본으로 변경됩니다. 당신이 만약하고 있는지 확인 /bin/sh
입니다 bash
, 당신은 행동을 사용하고 bash
로 실행할 때 노출하지 않습니다 /bin/sh
; 사용 bash
으로 bash
.
/bin/sh
좋아하지 않는다set -o pipefail
. 실제로bash
변장입니까, 아니면 다른 껍질입니까?bash
로 실행 되면/bin/sh
수락set -o pipefail
합니까?