26 Kasım 2019 Salı

bash kodlama - gömülü metodlar veya komutlar

Giriş
built-in commands için Kısıtlı bir liste şöyle.
.               continue        getopts         readonly        type
:               echo            hash            return          ulimit
[               eval            jobs            set             umask
alias           exec            kill            shift           unalias
bg              exit            local           test            unset
break           export          printf          times           wait
cd              false           pwd             trap
command         fg              read            true
Bir komutun gömülü metod olup olmadığını anlamak için şöyle yaparız.
bash-4.3$ type :
: is a shell builtin
veya şöyle yaparız.
$ command -V true false
true is a shell builtin
false is a shell builtin
alias built-in komutu
alias built-in komutu yazısına taşıdım.

. built-in komutu
Type komutu ile kontrol edersek şu çıktıyı alırız.
. is a shell builtin
: built-in komutu
: (No Effect) built-in komutu yazısına taşıdım

command built-in komutu
command built-in komutu yazısına taşıdım

echo built-in komutu
echo built-in komutu yazısına taşıdım.

exec built-in komutu
exec built-in komutu yazısına taşıdım.

exit built-in komutu
exit built-in komutu yazısına taşıdım.

false built-in komutu
true ve false built-in komutları yazısına taşıdım.

local built-in komutu
değişkenin scope'unu metod yapar. Bu komutu kullanırken her zaman "declare and assign separately" kuralına dikkat etmek gerekir.
Örnek
Şu kod yanlış.
function my_fun() {
  ocal output=$(ls no_file_here_buddy)
  cho $?  # returns 0

  on_local_var=$(ls no_file_here_buddy)
  echo $? # returns 2
}
Açıklaması şöyle.
The exit status of the command is overridden by the exit status of the creation of the local variable.
Şöyle yaparız.
local output
output=$(ls no_file_here_buddy)
echo $?
Örnek
Şöyle yaparız.
foo(){
  local name
  name="$1"
  echo "$name"
}
Eğer global olsun istersek şöyle yaparız.
#!/bin/bash
name="$1"
echo "$name"
printf komutu
printf built-in komutu yazısına taşıdım.

read built-in komutu
read built-in komutu yazısına taşıdım.

shift built-in komutu
shift built-in komutu yazısına taşıdım.

set built-in komutu
set built-in komutu yazısına taşıdım.

trap built-in komutu
trap built-in komutu yazısına taşıdım.

true built-in komutu
true ve false built-in komutları yazısına taşıdım.

unset built-in komutu
Örnek
Şöyle yaparız.
unset myvariable    # unset so that it doesn't inherit a value from the environment
wait built-in komutu
Çalıştırılan komutların bitmesini bekler. Açıklaması şöyle.
f ID is not given, waits for all currently active child processes, and the return status is zero.
Örnek
Şöyle yaparız. Bu örnekte çalıştırılan perl komutuna üst sınır konulmuyor. Kaç tane txt dosyası varsa o kadar perl çalıştırılıyor.
for f in file*.txt; do
    perl dataProcessing.pl "$f" &
done
# wait for them to complete
wait
echo "All done."
-n seçeneği
Açıklaması şöyle. Bu seçenek yerine sanırım wait "$!" seçeneği de kullanılabilir.
If the -n option is supplied, waits for the next job to terminate and returns its exit status.
Örnek
Şöyle yaparız.
$ bash -exc '(sleep 1; exit 1) & wait -n; echo $?:done'
+ wait -n




Hiç yorum yok:

Yorum Gönder