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, command1sı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 pipefaildiyor 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 setve onu bulamadı.
/bin/sh -c "set -o pipefail"çalışmıyor, ancak çalışıyor bash -c "set -o pipefail".
/bin/shtanımadığı tarafından çalıştırılmasıdır set -o pipefail. Sonuç olarak, komut dosyasının /bin/bashyerine ç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/shbir bağlantı /bin/bashveya kopya olarak değiştirin. Bunun olduğundan eminseniz, /bin/shşu şekilde çalıştırıldığında ortaya çıkmayan bashdavranışlar kullanırsınız ; kullanmak olarak . bash/bin/shbashbash
/bin/shsevmezset -o pipefail. Aslındabashkılık değiştirmiş mi, yoksa farklı bir kabuk mu? Ne zamanbashçalıştırılır/bin/sh, kabul ederset -o pipefailmi?