.Sh betiğini nasıl çalıştırırım?


344

Ne zaman bir .sh dosyasını açtığımda, terminal yerine gedit ile açılır. Sağ TıklaBirlikte AçDiğer Uygulama ...Terminal'e benzer bir seçenek bulamıyorum .

Bu dosyayı terminalde nasıl açarım?


Bu senaryo ileride kullanılmak üzere env değişkenleri kurmayı hedefliyor mu?
Rob

1
Komut dosyalarında uzantı kullanmamalısınız. Gelecekte bir noktada, geçerli komut dosyanızın yaptığı görevi yerine getirmek için farklı bir dilin daha uygun olduğunu görebilirsiniz. Ve sonra bir problemin var. Eski adı tamamen yanıltıcı bir uzantıya sahip olarak mı tutuyorsunuz ya da muhtemelen betiğinizin kullanıldığı yerlerin birçoğunu düzenlemek zorunda kaldınız mı?
geirha

Dosya uzantısına ihtiyacınız yok. Sahip olmak güzel ama gerekli değil. İşletim sistemi dosya uzantısına bakmıyor. Verilere bakar
ActionParsnip

5
Foo.sh dosyasını ruby ​​olarak yeniden yazarsanız, başlatmak için .sh dosyasını her zaman kullanabilirsinizruby foo.rb
glenn jackman

Dolphin'de F4'e basabilirsiniz ve bir konsol açılır
Motte001

Yanıtlar:


523

Komut dosyasına yürütme izni verin:

chmod +x /path/to/yourscript.sh

Ve betiğini çalıştırmak için:

/path/to/yourscript.sh

Yana .geçerli dizine işaret eder: eğer yourscript.shgeçerli dizinde olduğunu, bu kadar kolaylaştırabilirsiniz:

./yourscript.sh

13
+1 sadece uçbirim yönünden yürütme izinlerinin eklendiğini göstermek için yanıt verir.
Hailwood

83
Eğer öyleyse bash /path/to/yourscript.shihtiyacın yokchmod +x
Aleksandr Levchuk

4
Aslında, . /path/to/yourscript.shbetiğin bazı ortam değişkenleri kurması gerekiyorsa kullanabilirsiniz .
Rob

1
Kimse gelenekselten bahsetmiyor: ./path/to/yourscript.sh(sonra boşluk olmadan .)? Ben birini kullanmak için en basit ve en kolay bulmak ... Ama neyse, burada hemen hemen aynı yapmalıyım benim alternatiftir ./kullandığınız için bir neden görmüyorum olsa olurdu ./: (FILENAME=~/rem4space.sh;SLL=$(cat $FILENAME|head -1|sed 's:^#!\(.*\):\1:g');[ ! -z $SLL ] && exec $SLL $FILENAME;sh $FILENAME)... düzenlemek FILENAMEbeğeninize . shAlternatif olmadığında da kullanılacağına dikkat edin .
MiJyn

88

Kabuk komut dosyalarını dosya yöneticisinden çalıştırmak için çalıştırılabilir olarak işaretlemeniz gerekir:

  1. Sağ senin tıklayın .shdosyaya basıp Özellikleri :

    görüntü tanımını buraya girin

  2. In İzinler sekmesi, kontrol programı olarak dosyayı yürütme izin ver :

    görüntü tanımını buraya girin

  3. Kapatın Özellikleri penceresini ve dosyayı çift tıklatın. Komut dosyasını bir terminalde çalıştırma seçeneği sunan bir iletişim kutusu açılacaktır:

    görüntü tanımını buraya girin


10
Bu 13.04 Ubuntu'da çalışmıyor. Yine de küfür açmaya devam ediyor, asla idam etmemi istemiyor. Düzenleme: Nvm, imjustmatthew buna cevap verir.
27'de mpen mpen

Bunu kullanmadan önce chmod kullanarak yürütmek için dosya izni vermemiz gerekir. chmod + x dosyaadı.sh veya chmod 755 dosyaadı.sh
Arvind Rawat

Açılır pencerem yok! IDE hemen açılır, açılır
Yeşil

Neden arabirimde hiçbir yerde "terminalde çalıştır" bulamıyorum? (Ubuntu 18.04)
Daniel Möller


33

Bir terminal açın ve .shdosyanın bulunduğu klasöre gidin . Sonra şunu yazın:

sh <name of file>.sh

Herhangi bir uygulamayı açmak için en iyi yol. .Sh dizinine gidin ve komut isteminde açın. sh <yukarıda gösterilen dosyanın adı> .sh kullanımı izin gerektiriyorsa, chmod + x /path/to/yourscript.sh dosyasını kullanın veya sağ tıklayıp herkese izin verin
Durgesh Kumar

24

Önkoşul

.Sh dosyasını çalıştırabilmeniz için önce çalıştırılabilir hale getirmeniz gerekir:

  1. Dosyaya sağ tıklayın
  2. Özellikleri Seç
  3. İzinleri Seç
  4. Dosyayı program olarak çalıştırmaya izin ver'i seçin.

Uyarı

Dosyayı aldığınız kaynağa güvendiğinizden emin olun. Bir virüs olabilir .

Çok basit bir yol

  1. Dosyaya çift tıklayın
  2. Terminalde çalıştırmak tıklayın

Bunun bir sorunu var. Terminal hemen kapanacak ve çıktıyı göremeyeceksiniz.

Basit bir yol

  1. Açık Uygulamalar -> Aksesuarlar -> Terminal
  2. .Sh dosyasını sürükleyip terminale bırakın ve Enter'a basın

Profesyonellerin yaptığı şekilde

  1. Açık Uygulamalar -> Aksesuarlar -> Terminal
  2. .Sh dosyasının nerede olduğunu bulun

    • lsVe cdkomutlarını kullanın
    • lsgeçerli klasördeki dosyaları ve klasörleri listeler . Bir deneyin: "ls" yazın ve Enter tuşuna basın.
    • Gitmek istediğiniz klasörü görünce, çalıştırın cd, ardından bir boşluk ve ardından bir klasör adı izleyin.
    • İstemediğiniz bir klasöre girerseniz, cd ..bir seviye yukarı çıkmak için koşun
  3. .Sh dosyasını çalıştırın

    • Örneğin görebildiğinizde script1.shile lsvadede bu:

      ./script.sh

Neden karmaşık bir şekilde yapıyorsun?

Terminal, komutları yazarak erişilebilen zengin bir dizi güçlü araca sahiptir. Uzmanları yazarak .sh dosyasını bulun lsve cd. Doğru klasöre girdikten sonra betiği şu şekilde çalıştırabilirsiniz:

./script1.sh

veya çıktıyı bir dosyaya çalıştırabilir ve yönlendirebilirsiniz:

./script1.sh > out.txt

veya anahtar kelimeler için çıktıyı filtreleyebilirsiniz (örneğin "elmalar") ve sonra bir dosyaya yönlendirebilirsiniz:

./script1.sh | grep apples > ./only-apples

Sadece birkaç komut yazarak o dosyaya yapabileceğiniz binlerce şey var.

Başka bir dosyayı internetten tek bir basit komutla indirebilirsiniz:

wget www.google.com/images/logos/ps_logo2.png

Sonra dosyayı şu şekilde açın:

shotwell ps_logo2.png

6
Eminim bundan değil yolu uzmanları bunu yapmak doğrudur, bu bir vaka daha var basit bir şekilde gelişmiş (için çıkış kontrolü için) yolu
Hailwood

İlk denememde profesyonellerin yaptığını yaptığımı bilmek güzel. Temel kullanıcının yolu olduğunu sanıyordum.
NelsonGon

19

Ubuntu'da, Nautilus'ta açılan 13.04 çalıştırılabilir dosyalar, kullanıcının bunları çalıştırmasını istemek yerine varsayılan olarak gedit'te açılır. Klasik davranışı etkinleştirmek için tercihleri ​​ayarlamanız gerekir:

Nautilus → Düzen menüsü → Tercihler → Davranış sekmesi → Her seferinde Ask'ın yanındaki radyo düğmesini tıklayın.


Soruyu soran kişi, Ubuntu 10.10 hakkında konuşuyor
edwin

1
Teşekkür ederim!!! Bunu neden değiştirdiklerini bilmiyorum, nasıl bir şey yapılacağını çözemedim.
28'de mpen

1
Bu, en son ubuntus için doğru cevap.
gaRex

15.10'da Nautilus'a nasıl gidilir?
Yaakov Ainspan

Ubuntu 18.04'ten itibaren, bir dizin açıp ardından üst çubuktaki "Dosyalar -> Tercihler" seçeneğini tıklayarak tercihlere erişebilirsiniz.
tparker

7

.shKullanarak dosyanın bulunduğu dizine gidin cd. Bu örnekte dosyamı sholduğu gibi sakladım.~/Desktop/shell_practice/test.sh

ilk önce pwdnerede olduğunuzu bulmak için yapar ve geri dönerse /home/username( usernamegerçek kullanıcı adınız nerede ),

cd Desktop/shell/practice

Başka bir yerde görünüyorsanız, mutlak yolu kullanabilirsiniz

cd ~/Desktop/shell/practice

veya

cd $HOME/Desktop/shell/practice

ya da

cd /home/$USER/Desktop/shell/practice

bunların hepsi aynı yeri tanımlamanın yolları. Komut dosyanızın konumuna geldikten sonra, şunu yazın

ls

shDosyayı çıktıda görebilirseniz, chmodçalıştırılabilir yapmak için kullanabilirsiniz . Benim durumumda, unutma, dosya adı test.sh, yani koşarım

chmod u+x test.sh

Artık komut dosyasıyla aynı dizinde olduğumuza göre, konumunu ./(dosya adını ayırmak için geçerli bir dizin ayırıcı tarafından izlenen geçerli dizin) vererek dosyayı çalıştırmak istediğimiz kabuğa belirtmeliyiz . Dosyamı çalıştırmak için şunu yazarım:

./test.sh

Eğer betiğiniz doğru yazılmışsa, hatasız çalışır.

İşte canlı bir örnek: İşte canlı örnek


Bu benim için Netbeans'i
ubuntu'ya

1
Wb, @ RuD3B0y, bazı düzenlemeleriniz varsa memnuniyetle karşılıyorsunuz noobs için en iyi yanıtları almaya çalıştım.
Exorcist

4

2 ana adım.

  1. Terminalde masaüstüne ".sh" uzantılı komut dosyası yazmak ve kaydetmek için gedit kullanın. (ancak herhangi bir metin editörü kullanılabilir)

  2. Nautilus'u açın ve script.sh dosyasına sağ tıklayın.

    • özelliklerin altında, "dosyanın yürütülmesine izin ver .." onay kutusunu işaretleyin.

    • Nautilus menüsünde, dosyaya, ardından tercihlere, ardından davranışa tıklayın

    • "çalıştırılabilir çalıştırılabilir metin dosyalarını açtıklarında çalıştır" kontrol edin.

Şimdi, masaüstündeki dosyayı çift tıkladığınızda çalıştırılması gerekir. gerek yok .ya./


3
  1. .shDosyaya sağ tıklayın ve çalıştırılabilir hale getirin.

  2. Bir terminal açın ( Ctrl+ Alt+ T).

  3. .shDosyayı terminal penceresine sürükleyin ve huşu içinde izleyin.


1
Ubuntu'ya Sormaya Hoş Geldiniz! İlk adımı nasıl yapacağınızla ilgili ayrıntılı bilgi vermek için bu cevabı düzenlemenizi öneririm . (Ayrıca bkz İyi bir cevap yazmak nasıl? Ask Ubuntu en değerli kabul edilen cevapların ne tür hakkında genel öneri niteliğinde değildir.)
David Foerster

3

Bunu yapmanın birkaç yolu var.

seçenek 1

  1. Terminalde, Bash dosyasının kullandığı dizine erişin (dizini cddeğiştir).

    Ör. cd Downloads

  2. Çalıştırmak bash <filename>.sh

    Bu aynı zamanda .run dosyalarıyla da çalışır. Bu web sitesinde Rhythmbox'ın güncellenmesiyle ilgili bir örnek var .

seçenek 2

  1. Terminalde, bash dosyasının içinde bulunduğu dizine gidin.

  2. Çalıştırmak chmod +x <filename>.sh

  3. Nautilus'ta dosyayı açın.


3

İçin Ubuntu 18.04 Eğer bir pop-up iletişim kutusu alamadım gibi, biraz değişiklik yoktur.

Yani yapmanız gereken şey:

Çalıştırılabilir metin dosyasının altındaki Dosyalara, Tercihleri ​​Seçin> Davranış Seçin Sekmesi> 'Ne yapacağımı sor' seçeneğini işaretleyin.

Şimdi, herhangi bir .sh dosyasına çift tıkladığınızda, bir pop-up alacaksınız, orada .sh dosyanızı çalıştırmak için "terminalde çalıştır" seçeneğini seçebilirsiniz.

görüntü tanımını buraya girin


2

Ubuntu 16.04'te Terminal'de nasıl açılacağı:

Git File Manager > Edit > Preferences > Behavioriçin Executable Text Filesseçin Ask each time.

Sorun, varsayılan olarak ayarlanmış olmasıdır View Executable Files when they are opened.


1

Kabuk komut dosyanızı veya / usr / local / bin içinde oluşturduğunuz diğer yürütülebilir dosyaları yerleştirirseniz, komut satırında bir klasör yolu belirtmeden veya adına ./ eklemeden bulunacak ve bulunacaktır. Örneğin, disk UUID'lerini görüntülemek için aşağıdaki basit 3 satır bash komut dosyasını oluşturdum:

#!/bin/bash
echo "* UUIDs must match in /etc/fstab and /boot/grub/menu.lst"
sudo blkid

Uuid dosyasını aradım ve / usr / local / bin içine yerleştirdim. Komut satırına girmem gereken tek şey:

uuid

0

Ben de aynı problemle karşılaştım. .Sh dosyasını çalıştırmak istedim ve CentOS 7'deki Gedit ile açıldı. İşte yaptığım şey:

  1. Çalıştırmak .shistediğim dosyanın yoluna gittim.
  2. Terminali açtım.
  3. Ve basitçe terminal penceresine sürükleyip bıraktım ve otomatik olarak bu dosyayı yol olarak girdi olarak aldı.
  4. Enter tuşuna basın ve gitmeniz iyi olur!

0

Birkaç dağıtımda bulduğum sorun Nautilus'taki tercihler seçeneğini gizlemiş olmaları, ancak Ubuntu'da düzeltmek ve Gnome3'ü kullanarak diğer dağıtımları düzeltmek aynıdır (kelimenin tam anlamıyla bu sadece Fedora versiyonunu yaptı ve hatırlatmak için gerçek düzeltmeyi yayınladı) nasıl gelecekte).

  1. Yüklemek dconf-editor

    sudo apt-get install dconf-editor
  2. Run dconf-editorEğer bu istediğiniz kullanıcı hesabını kullanarak, kök DEĞİL yani

    dconf-editor
  3. Aşağıdaki şemaya gidin:

    org.gnome.nautilus.preferences

  4. Varsayılan seçeneği açmamak için varsayılan seçeneği değiştirin:

    Bul executable-text-activationkelimesini tıklayın displayve değiştirmekask

bu, ileriye dönük dosyayı düzenleme, görüntüleme veya çalıştırma seçeneği sunar


0

Ben Linux'ta bir noob ve aynı sorun vardı. Eğer hepsi hataysa:

  1. Açık terminal
  2. .Sh dosyasını içeren klasörü açın
  3. Dosyayı sürükleyip terminal penceresine bırakın
  4. Dosyanın yolu terminalde görünür. Basın Enter.
  5. Voila, .sh dosyanız çalışıyor.

-2

.Diğer cevapların önerisi ile püf noktalarını de kullanabilirsiniz .

Örneğin:

chmod +x filename.sh, zaten dosya yoluna gittiğinizi farz ettikten sonra dosyayı aşağıdaki komutlardan biriyle çalıştırın:

sh filename.sh

./filename.sh

. filename.sh

2
uyarı : Bu üç komut eşdeğer değil . Eğer shebang'ınız farklı bir ikiliye (Stack gibi) atıfta bulunursa, üçüncü komut Bash ile argümanları ayrıştırmaya çalışır, başarısız olur.
Jezen Thomas
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.