Ben böyle olmayan bir BASH komut dosyasından (yani PHP komut dosyası) borulu kabuk komutları bir dizi yürütmek gerekir:
command1 | command2 | command3
böylece, command1
sıfırdan farklı bir çıkış koduyla başarısız olursa, diğer komutlar da başarısız olur. Şimdiye kadar bulduğum şey:
set -o pipefail && command1 | command2 | command3
Ancak terminalden iyi çalışsa bile, komut dosyasından yürütüldüğünde bunu üretir:
sh: 1: set: Geçersiz seçenek -o pipo hatası
/bin/sh set -o pipefail
diyor ki /bin/sh: 0: Can't open set
(ile aynı şey sudo
). Umarım doğru test ettim. Sistem Ubuntu 12'dir.
/bin/sh -c "set -o pipefail"
; olduğu gibi, kabuk denilen geçerli dizinde bir komut dosyası yürütmeye çalışıyordu set
ve onu bulamadı.
/bin/sh -c "set -o pipefail"
çalışmıyor, ancak çalışıyor bash -c "set -o pipefail"
.
/bin/sh
tanımadığı tarafından çalıştırılmasıdır set -o pipefail
. Sonuç olarak, komut dosyasının /bin/bash
yerine çalıştırıldığından emin olmanız gerekir /bin/sh
. Ya da kendinize güveniyorsanız, şu anda bağlı olduğu kabuk veya bir kopya yerine , cesur ve muhtemelen aptalca /bin/sh
bir bağlantı /bin/bash
veya kopya olarak değiştirin. Bunun olduğundan eminseniz, /bin/sh
şu şekilde çalıştırıldığında ortaya çıkmayan bash
davranışlar kullanırsınız ; kullanmak olarak . bash
/bin/sh
bash
bash
/bin/sh
sevmezset -o pipefail
. Aslındabash
kılık değiştirmiş mi, yoksa farklı bir kabuk mu? Ne zamanbash
çalıştırılır/bin/sh
, kabul ederset -o pipefail
mi?