Perbedaan antara perintah dalam skrip bash dan perintah di terminal

13

Apakah ada perbedaan antara perintah yang Anda ketikkan ke terminal dan perintah yang Anda sertakan dalam skrip?

jth41
sumber
Sama sekali bukan pertanyaan bodoh! Lihat ini (pertama), lalu ini , dan ini .
Emanuel Berg

Jawaban:

7

Terminal Anda menjalankan shell (kemungkinan besar bash), yang mana meminta perintah Anda dan menjalankannya.

Selain mode interaktif ini, Anda juga dapat menggunakan shell untuk menjalankan perintah dari file. Untuk menjalankan perintah dalam file Anda, Anda dapat memanggil shell langsung suka bash scriptatau Anda dapat memulai file Anda dengan "shebang" #!/bin/bashdan membuatnya dapat dieksekusi ( chmod +x script). Kemudian Anda dapat memperlakukan skrip seperti biner dan menjalankannya sebagai contoh ./scriptatau meletakkannya di tempat di mana shell Anda mencarinya. ( echo $PATH)

Kemungkinan besar shell interaktif Anda dan shell yang digunakan untuk menjalankannya bash. Dari perspektif bash "hari pertama belajar linux" bekerja persis sama di kedua mode. - Jauh kemudian Anda mungkin tersandung tentang sedikit perbedaan. Jika Anda benar-benar ingin tahu tentang detail saya sarankan membaca man bashdan mencari tempat yang menyebutkan "interaktif". (Anda dapat mencari halaman manual, dengan menekan /.)

Satu hal penting yang perlu diperhatikan adalah skrip dijalankan sebagai proses baru. Ini terutama berarti bahwa variabel yang diatur dalam skrip tidak terlihat di shell panggilan.

$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$ 

Tanpa ekspor abahkan tidak terlihat oleh skrip dalam.

michas
sumber
1

Secara umum, jawabannya adalah "tidak", perintah dalam shell sama dalam skrip, dalam sintaks dan semantik.

Tetapi ada banyak nuansa kecil yang terkait dengan konfigurasi lingkungan (variabel apa yang digunakan dan apa yang ditetapkan).

  • shell interaktif pilihan untuk Linux adalah bash, tapi scripting sering menggunakan penerjemah lainnya ( shyang merupakan pendahulu dari bash, kshyang setara dengan bash), sehingga Anda harus mempertimbangkan apa shell yang digunakan (shell saat s nama secara tradisional disimpan dalam variabel SHELL, coba ketik echo $SHELL).

  • mungkin ada perbedaan dalam konfigurasi interpreter yang sama untuk sesi interaktif dan untuk eksekusi skrip.

Dmytro Sirenko
sumber
-1

Tidak. Sebuah skrip adalah daftar perintah yang bisa Anda ketik di terminal.

Anda dapat menempelkan totalitas skrip di terminal, dan hasilnya akan sama dengan menjalankannya.

Sebaliknya, Anda dapat "menyimpan" perintah terminal Anda di dalam file dan mengubahnya menjadi skrip yang dapat digunakan kembali dan membaginya dengan keluarga dan teman-teman Anda.

Mathieu J.
sumber
4
Tidak. Menempelkan konten setara dengan sumber skrip. Ini akan mengubah semua jenis opsi di shell saat ini, yang tidak akan diubah hanya dengan menjalankan skrip.
michas
Anda benar. tapi sejauh pertanyaannya. Saya pikir kita bisa mengatakan itu sangat mirip. tapi ya, untuk menerjemahkan apa yang dikatakan michas dalam istilah yang lebih baru. menempelkan isi skrip sama dengan yang harus dilakukan source script_file. yang akan mengedit vars ENV dalam konteks saat ini. saat menjalankan skrip karena ./script_filetidak akan memodifikasi ENV, kecuali exportdigunakan secara eksplisit.
Mathieu J.
1
Tidak. Bahkan dengan exportskrip tidak dimungkinkan untuk memodifikasi variabel apa pun dari shell panggilan. Hal yang sama berlaku untuk hal-hal seperti PWD, alias yang didefinisikan, fungsi, dan hal-hal seperti itu. Mereka dapat diubah hanya secara interaktif atau dengan sumber file. Tapi ya, itu mungkin tidak ada yang akan tersandung pada hari pertama. :)
michas
1
@ Michael: Yah, masih lebih baik untuk memberikan deskripsi yang benar. Jika pemula itu ambisius, dan memiliki kebiasaan kerja, ia akan cepat mengerti. Jika kita mencoba menceritakan kisah anak itu, kita hanya akan tersandung kaki kita dan membuat kesan yang tidak dapat dipahami - selain itu, pemula mungkin akan kembali, nanti. Meskipun saya tidak menganggap diri saya seorang pemula, ada banyak hal yang saya tidak tahu, dan saya akan dihina jika ada yang menahan sesuatu menjawab pertanyaan saya karena "Anda belum sampai di sana, junior".
Emanuel Berg