#! / Usr / bin / env bash neden sistemimde çalışmıyor?


11

Şikayet ettikleri bazı kurulum komut dosyalarını çalıştırırken bazı sorunlarla karşılaştım bad interpreter.

Bu yüzden önemsiz bir örnek verdim ama sorunun ne olduğunu anlayamıyorum, aşağıya bakın.

#!/usr/bin/env bash
echo "hello"

Yukarıdaki komut dosyasını çalıştırmak aşağıdaki hatayla sonuçlanır

[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory

/usr/bin/envDosya, aşağıya bakınız Varlığından:

[root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env
lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env
[root@ech-10-24-130-154 dc-user]# ls -l /bin/env
-rwxr-xr-x 1 root root 23832 Jul 16  2014 /bin/env
[root@ech-10-24-130-154 dc-user]#

Eğer düzenli shebang kullanmak için komut dosyasını değiştirmek #!/bin/bashsorun olmaz. #!/bin/env bashçalışır.

Portatif gövdenin çalışmasına izin vermek için ortamdan eksik olan nedir?

ls -lL /usr/bin/envdöner ls: cannot access /usr/bin/env: No such file or directoryyüzden ben sembolik bağlantıyı değiştirmek gerekiyor galiba? Bunu gösterebilir miyim /bin/env?

env --version işletim sistemi 8.4 ve işletim sistemi Red Hat Enterprise Linux Server sürüm 6.6'dır.


1
Genellikle bu, hatlardaki taşıma-dönüş / hat besleme sonlarından kaynaklanır. Alternatif olarak: env .
Thomas Dickey

Yanıtlar:


7

ls -lL /usr/bin/envsembolik bağlantının kopuk olduğunu gösterir. Bu, shebang hattının neden çalışmadığını açıklıyor: çekirdek, sarkan bir sembolik bağ kurmaya çalışıyor ve açık bir şekilde başarısız oluyor.

/usr/bin/env -> ../../bin/enveğer doğruysa /usrve /usr/binhem gerçek dizinleri (değil sembolik bağ) bulunmaktadır. Belli ki makinenizde durum böyle değil. Belki /usrsembolik bir bağlantıdır? (Açıkçası sembolik bir bağlantı değildir /, aksi takdirde sembolik bir bağlantıyla /usr/bin/envaynı dosya /bin/envolmaz).

Bu sembolik bağlantıyı düzeltmeniz gerekiyor. Mutlak bir bağlantı yapabilirsiniz:

sudo ln -snf /bin/env /usr/bin/env

Göreli bir bağlantı yapabilirsiniz, ancak yaparsanız, doğru olduğundan emin olun. Symlink'i oluşturmadan hemen önce aldığınızdan emin olmak için geçiş yapın /usr/binve çalıştırın ls -l relative/path/to/bin/env.

Bu varsayılan bir RHEL kurulumu değildir, bu nedenle yerel olarak bir şey değiştirmiş olmanız gerekir. Ne yaptığınızı ve bunun benzer sorunlara yol açıp açmayacağını bulmaya çalışın.


Bu doğru, /usr/binbaşka bir dosya sistemine taşındı ve sembolik bir bağlantı/vol_01/usr/bin
conorgriffin

-1

İşte (Fedora 23) /binsembolik bağlantı olduğunu /usr/bin; benzer bir kurulumunuz varsa, gelen sembolik bağlantı /usr/bin/envsize sonsuz bir döngü satın alır.

İlgili paketleri kontrol edin, yani rpm -qf /usr/bin/env /bin/envbunları yeniden yükleyin (burada coreutils, yani yum reinstall coreutilsveya benzeri). Bu, yanlış yönlendirilmiş tüm manevraları düzeltmelidir.


Zaten yeniden yükledim coreutilsama bu bir fark yaratmadı. Çok garip. /usr/bin/envhedefine göreli bir yolu olan sembolik bir bağlantıdır ../../bin/env. Öyleyse /bin/envvar olan da bu olmalı . Bu yüzden bu sembolik bağlantının neden çalışmadığını anlamıyorum. Hedefi /bin/env, mutlak bir yolu gösterecek şekilde değiştirdim ve işe yaramış gibi görünüyor.
conorgriffin

Eğer /binbir sembolik bağ oldu /usr/binconorgriffin sisteminde, daha sonra /usr/bin/envve /bin/envaynı dosya olacaktır.
Gilles 'SO- kötü olmayı bırak'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.