Ruby, exec, sistem ve %arasındaki Fark x() veya Backticks
Kimseyi takip Ruby yöntem arasındaki farkı biliyor mu?
exec
, system
%x()
yaBackticks
Terminal Komutları Program aracılığıyla Ruby üzerinden çalıştırmak için kullanılır biliyorum, ama bunu yapmak için üç farklı yolu vardır neden bilmek istiyorum.
CEVAP
sistem
system
yöntemi sistemi programı çağırır. Bu yöntem için bir dize bağımsız değişken olarak komut vermelidir. Örneğin:
>> system("date")
Wed Sep 4 22:03:44 CEST 2013
=> true
Çağrılan program Ruby programınızın*, STDOUT
*8 STDERR
geçerli nesneleri kullanır. Aslında, gerçek bir dönüş değeri ya true
, false
nil
. Örneğin tarih STDIN
IO nesne ile basıldı. Yöntemi ise yürütme başarısız olursa işlemi sıfır bir durum olursa işlemi sıfır olmayan bir durum ile çıkıldı false
nil
ile çıkıldı true
dönecektir.
Başka bir yan etkisi global değişken $?
Process::Status
bir nesneye ayarlanır. Bu nesne çağrılan sürecin süreç kimliği (PID) ve çıkış durumu da dahil olmak üzere çağrı kendisi hakkında bilgi içerir.
>> system("date")
Wed Sep 4 22:11:02 CEST 2013
=> true
>> $?
=> #<Process::Status: pid 15470 exit 0>
Backticks
Backticks (`) sistemi bir program olarak görüyor ve çıkış dönüş. İlk yaklaşım karşı, komut backticks bir çift içine koyarak bir dizi aracılığıyla, ama verilmez.
>> `date`
=> Wed Sep 4 22:22:51 CEST 2013
Global değişken $?
ters tırnaklar, yeni ile de ayarlanır. Backticks ile de dize aradeğerleme yararlanabilirsiniz.
x %()
%x
kullanarak backticks tarzı bir alternatiftir. Çıktı da dönecektir. Onun akrabaları gibi %w
%q
(diğerleri arasında), herhangi bir sınırlayıcı olarak uzun tarzı ayraç sınırlayıcıları maç olarak yeterli olacaktır. Bu %x(date)
, %x{date}
%x-date-
tüm eş olduğu anlamına gelir. Backticks gibi %x
dize aradeğerleme.
exec
Kernel#exec
kullanarak geçerli işlem (Ruby script) süreci exec
ile çağrılan ile değiştirilir. Yöntemi, argüman olarak bir dize alabilir. Bu durumda dize genişleme kabuk tabi olacaktır. Birden fazla bağımsız değişken kullanırken, daha sonra ilk bir programı çalıştırmak için kullanılır ve aşağıdaki çağrılacak program için bağımsız değişken olarak sağlanır.
'Perl'In backticks arasındak...
Arasındaki fark "veya" Ruby ...
Arasındaki fark "sistem" ve ...
Ve Ruby dahil ihtiyaç arasındaki fark ...
'DateTime, zaman Damgası, Zaman v...