Linux komutuyla karşılaştım builtin cd
.
Komutlar builtin cd
ve arasındaki fark nedir cd
?
Aslında, fark hakkında bazı araştırmalar yaptım, ancak bu konuda kayda değer ve önemli bir açıklama bulamadım.
Linux komutuyla karşılaştım builtin cd
.
Komutlar builtin cd
ve arasındaki fark nedir cd
?
Aslında, fark hakkında bazı araştırmalar yaptım, ancak bu konuda kayda değer ve önemli bir açıklama bulamadım.
Yanıtlar:
cd
Komut böylece normalde, yerleşik bir olduğu builtin cd
aynı şeyi yapacaktır cd
. Ancak cd
bir işlev veya diğer ad olarak yeniden tanımlanırsa bir fark vardır, bu durumda cd
işlevi / diğer adı çağırır, ancak builtin cd
dizini yine de değiştirir (başka bir deyişle, bir işlev tarafından tıkanmış olsa bile yerleşik olanı erişilebilir tutar.)
Örneğin:
user:~$ cd () { echo "I won't let you change directories"; }
user:~$ cd mysubdir
I won't let you change directories
user:~$ builtin cd mysubdir
user:~/mysubdir$ unset -f cd # undefine function
Veya bir takma adla:
user:~$ alias cd='echo Trying to cd to'
user:~$ cd mysubdir
Trying to cd to mysubdir
user:~$ builtin cd mysubdir
user:~/mysubdir$ unalias cd # undefine alias
Kullanmak builtin
, bir cd
şey yapan ve dizini değiştiren bir işlevi tanımlamak için de iyi bir yoldur (ondan cd
çağırmak, işlevi sonsuz bir özyinelemede tekrar çağırmaya devam edeceğinden).
Örneğin:
user:~ $ cd () { echo "Changing directory to ${1-home}"; builtin cd "$@"; }
user:~ $ cd mysubdir
Changing directory to mysubdir
user:~/mysubdir $ cd
Changing directory to home
user:~ $ unset -f cd # undefine function
builtin cd mysubdir
ve \cd mysubdir
?
cd
, bu durumda \cd
diğer adı atlar ve işlevi çalıştırır. Bkz. Stackoverflow.com/a/16506263/4518341
Çoğu durumda, fark yoktur (ancak aşağıya bakınız). cd
Komuttur yerleşik bir bütün kabuklarda komuta. Harici bir komut, çağrılan kabuğun ortamını değiştiremediği ve çalışma dizininin değiştirildiği ortamda bir değişiklik oluşturduğundan dahili 1 olmalıdır .
bash
Komut builtin
kuvvetleri kabuğu kullanmak yerleşik bir komut sürümü, aynı adı taşıyan mevcut bir kabuk işlevi, takma veya harici komut olabilir rağmen.
Orada durumda olan ada sahip bir kabuk işlevi örneğin cd
, daha sonra builtin cd
olurdu değil diyoruz. Kullanarak builtin cd
, kullanıcı tarafından bir kabuk işlevi ya da diğer adıyla ilave edilen herhangi bir aşırı işlevselliği bypass.
Misal:
cd
Dahili komut istemi güncelleyen bir işlev tarafından aşırı yüklenmiş olabilir:
cd() {
builtin cd "$@" && PS1=$(__update_prompt)
}
burada __update_prompt
, bir dize çıktısı veren kullanıcı tarafından sağlanan başka bir işlev vardır.
builtin cd
Fonksiyonunda yinelemeli işlevi demezdim. builtin cd
Bu işlevin etkin olduğu bir kabukta kullanmak , ek olarak işlevi çağırmaz.
1 Harici komutlu Unices cd
(macOS ve sanırım Solaris) var. Bu komut, amacı edilemez bir kabuk çalışma dizinini değiştirmek, listeleri POSIX standardını, karşılamak için olasılıkla cd
mevcut olmalıdır dış araçlardan biri olarak ( cd
"özel bir yerleşik araçlardan biri" değildir) . Ayrıca, çalışma dizinini belirli bir dizine değiştirmenin mümkün olup olmadığını görmek için bir test görevi görebilir .
cd
komutla işletim sistemi kategorisine girer .