Kaynak neden “ikili dosya yürütülemiyor” hatası veriyor


10

Bir tmuxoturumu başlatır ve sonra bazı pencereler oluşturur küçük bir dosya var . Ben (metin dosyasını yeniden adlandırıldı kadar bazı hata ayıklama ve verdiği şeyler cezası çalıştıktan sonra tmuxgelen komutlara) spamiçin xset:

$ source xset
bash: source: /usr/bin/xset: cannot execute binary file

Şimdi dosyayı yeniden adlandırdım ve source spamtekrar çalışıyor, ama bunun neden olduğunu merak ediyorum. Dosya benim ana dizinimde, değil /usr/bin.


Adında bir ikili var xset. Deneyin source ./xset.
Faheem Mitha

Yanıtlar:


11

bashBir bölü (olmadıkça iç komut kaynağı, ilk, PATH dosya arar /Dosya adına). xsetPATH'inizde çalıştırılabilir bir dosyadır, bu nedenle sorun.

Sen yürütmek ya edebilir source ./xsetya da kapalı olarak KaynakYolu seçeneği değiştirin:

shopt -u sourcepath

Gönderen bashinsan-sayfa:

      source filename [arguments]
          Read and execute commands from filename  in  the  current  shell
          environment  and return the exit status of the last command exe
          cuted from filename.  If filename does not contain a slash, file
          names  in  PATH  are used to find the directory containing file
          name.  The file searched for in PATH  need  not  be  executable.
          When  bash  is  not  in  posix  mode,  the  current directory is
          searched if no file is found in PATH.  If the sourcepath  option
          to  the  shopt  builtin  command  is turned off, the PATH is not
          searched.  If any arguments are supplied, they become the  posi
          tional  parameters  when  filename  is  executed.  Otherwise the
          positional parameters are unchanged.  The return status  is  the
          status  of  the  last  command exited within the script (0 if no
          commands are executed), and false if filename is  not  found  or
          cannot be read.

5

sourceKomut olacak :

Geçerli kabuk bağlamındaki dosya adı bağımsız değişkeninden komutları okuma ve yürütme . Eğer dosya adı eğik çizgi içermez, PATHdeğişken bulmak için kullanılır dosya adını .

Bu davranış ( .diğer adı için) POSIX tarafından tanımlanır . Neden? Kaynaklanabilir yapılandırma komut dosyalarını içine koyabilir PATHve nitelikli bir yol olmadan bunlara erişebilirsiniz. İstediğiniz dosyaya erişmek için, bunun yerine mutlak veya göreceli bir yol verin:

source ./xset
source ~/xset
source /home/shawn/xset

Yukarıdakilerin tümü başlangıçta beklediğiniz gibi çalışacaktır. Ayrıca devre dışı bırakabilirsiniz sourcepathile shopt.

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.