Bir komut dosyasındaki komutlar bağımsız olarak tek tek yürütülür. Komut Dosyasının kendisi, komut dosyasındaki tüm komutların üst öğesi olarak, başka bir bağımsız işlemdir ve su komutu onu kök dizinine değiştirmez ve değiştiremez: su komutu, kök ayrıcalıklarına sahip yeni bir işlem oluşturur.
Bu su komutu tamamlandıktan sonra, hala aynı kullanıcı olarak çalışan ana işlem, komut dosyasının geri kalanını yürütür.
Yapmak istediğin bir sarmalayıcı komut dosyası yazmak. Ayrıcalıklı komutlar, örneğin ana komut dosyasına girer.~/main.sh
#!/bin/sh
ls /root
Sarıcı komut dosyası, ana komut dosyasını bunun gibi kök izinleriyle çağırır.
#!/bin/sh
su -c ~/main.sh root
Bu işlemi başlatmak için, sırayla kullanıcıyı kök kullanıcıya geçirdikten sonra ana betiği açan sarmalayıcıyı çalıştırırsınız.
Bu sarmalayıcı tekniği, senaryoyu kendi etrafındaki bir sarmalayıcıya dönüştürmek için kullanılabilir. Temel olarak root olarak çalışıp çalışmadığını kontrol edin, eğer değilse, kendini yeniden başlatmak için "su" kullanın.
$ 0, bir senaryoyu kendisine ifade etmenin kullanışlı bir yoludur ve whoami komutu bize kim olduğumuzu söyleyebilir (biz kök mü?)
Böylece yerleşik sargılı ana komut dosyası
#!/bin/sh
[ `whoami` = root ] || exec su -c $0 root
ls /root
Exec kullanımına dikkat edin. "Bu programın yerine geçme" anlamına gelir; bu, yürütmeyi etkili bir şekilde sonlandırır ve su tarafından başlatılan yeni bir programı kökten çalıştırmaya başlar. Değişim örneği "root" dır, bu yüzden ||
sudo su
gözlerimi acıtıyor.