perintah sumber tidak ditemukan di shell sh


148

Saya memiliki skrip yang menggunakan shshell. Saya mendapatkan kesalahan di baris yang menggunakan sourceperintah. Sepertinya sourcetidak termasuk dalam shshell saya .

Jika saya secara eksplisit mencoba menjalankan sourcedari shell saya mendapatkan:

sh: 1: source: not found

Haruskah saya menginstal "sumber"? Apakah saya memiliki versi yang salah sh?


1
Orang bisa beralasan bahwa shell yang mendukung sourceadalah "versi yang salah".
— William Pursell

1
Juga, pesan kesalahan source: not foundberarti bahwa sourceperintah dievaluasi dengan benar, tetapi file yang seharusnya dibaca tidak ada.
— Simon Richter

4
Tidak mungkin untuk "menginstal" source karena ini adalah fitur dari shell. Itu tidak dapat diimplementasikan sebagai perintah eksternal.
— Christopher Schultz

Jawaban:


152

/bin/shbiasanya beberapa shell lain mencoba meniru The Shell. Banyak distribusi digunakan /bin/bashuntuk shmendukung source. Di Ubuntu, meskipun, /bin/dashdigunakan yang tidak mendukung source. Sebagian besar kerang digunakan .sebagai gantinya source. Jika Anda tidak dapat mengedit skrip, coba ganti shell yang menjalankannya.


2
Terima kasih! Mengganti / bin / sh dengan / bin / bash berhasil di Ubuntu! Saya ingin tahu mengapa, apakah artinya pada Ubuntu bash is sh?
— Milad

1
@Milad: Di Ubuntus baru-baru ini, /bin/shpanggilan /bin/dash. Secara tradisional, yang /bin/shdipanggil /bin/bashadalah mode kompatibilitas-sh.
— choroba

@Milad Saya pikir itu tidak berfungsi di ubuntu 14.04. Apa versi OS Anda?
— Reza Ameri

1
Mungkin bantuan diketahui - jika Anda memiliki skrip kaskade maka ganti nama semua "sh -> bash". Terima kasih. :-)
— BG Bruno

Sayangnya itu tidak intuitif bagi saya bagaimana memperbaiki masalah ini tetapi membuat saya di jalur yang benar. Saya harus menambahkan SHELL := /bin/bashke bagian atas Makefile saya.
— anon58192932

136

Di Bourne shell (sh), gunakan. perintah untuk sumber file

. filename

Saya tidak benar-benar diizinkan untuk mengubah skrip, itu berjalan dengan baik di server redhat. Tetapi pada server itu, sumber tampaknya dimasukkan dalam sh
— Milad

2
Jika sudah sourcetidak ketat sh.
— tripleee

4
Saya mengalami masalah seperti ini pada Jenkins (mencoba mencari sumber file yang disimpan sebagai "file rahasia") dan sumber oleh "." perintah adalah solusinya.
— Jan Vlcinsky

Ini harus menjadi jawaban teratas karena ini akan bekerja dengan sh, dash, dan bash.
— akhan

3
Untuk kompatibilitas dengan Mac OS (lingkungan dev) dan Travis-CI (lingkungan pengujian), saya harus menggunakannya . ./filename. Kalau tidak, saya akan mendapatkan sh: 1: .: filename: not foundkesalahan saat menjalankan tes di Travis-CI.
— Adrien Joly

49
$ls -l `which sh`
/bin/sh -> dash

$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]

$ls -l `which sh`
/bin/sh -> bash

Maka itu akan baik-baik saja


Bagus! Saya menjalankan server RHEL dan Ubuntu dan saya selalu memiliki masalah kecil seperti ini dengan Ubuntu. Saya sangat suka RHEL dan RHEL seperti linux.
— radtek

Jawaban yang diterima tidak berfungsi di Ubuntu 14, yang ini berhasil!
— rohithpr

Silakan tambahkan beberapa penjelasan lebih lanjut untuk jawaban Anda - apa fungsinya? dpkg-reconfiguremungkin tidak dapat diakses untuk semua pengguna, terutama pada sistem yang tidak didasarkan pada Debian
— Nico Haase

Memperbaiki source: not foundkesalahan saya dengan klien telnet lama setelah upgrade debian, terima kasih.
— bjoster


9

Masalah ini terjadi karena jenkins Execute Shell menjalankan skripnya melalui / bin / sh

Akibatnya, / bin / sh tidak tahu "sumber"

Anda hanya perlu menambahkan baris di bawah ini di bagian atas Execute Shell Anda di jenkins

#!/bin/bash

Pertanyaan yang diberikan tidak terkait dengan Jenkins
— Nico Haase

8

The sourceperintah dibangun ke beberapa kerang. Jika Anda memiliki skrip, skrip tersebut harus menentukan shell apa yang akan digunakan pada baris pertama, seperti:

#!/bin/bash

Nah, katanya #! / Bin / sh dan di linux lain jika saya memasukkan sh secara manual dan bertanya "sumber mana" itu memberitahu saya: source: shell built-in command
— Milad

oh, jadi inilah gunanya baris ini. Saya selalu bertanya-tanya. terima kasih banyak
— CommonSenseCode

5

Saya menghadapi kesalahan ini ketika saya mencoba memanggil perintah sumber dari #Jenkins mengeksekusi shell.

source profile.txt atau source profile.properties

Penggantian untuk perintah sumber adalah dengan menggunakan,

. ./profile.txt atau . ./profile.properties

Catatan: Ada ruang antara dua titik (.)


0

Saya temukan di Makenile gnu di Ubuntu, (di mana / bin / sh -> bash)

Saya perlu menggunakan. perintah, serta menentukan skrip target dengan awalan ./ (lihat contoh di bawah)

sumber tidak berfungsi dalam contoh ini, tidak yakin mengapa karena seharusnya memanggil / bin / bash ..

Variabel lingkungan SHELL saya juga disetel ke / bin / bash

test:
    $(shell . ./my_script)

Perhatikan sampel ini tidak termasuk karakter tab; harus memformat untuk pertukaran stack.


0

source adalah perintah built-in bash sehingga untuk mengeksekusi perintah source, Anda bisa login sebagai Root.

sudo -s source ./filename.sh


Ini tidak terlihat seperti solusi yang valid. Bagaimana jika pengguna tidak memiliki izin sudo? Dan hal-hal yang bersumber setelah itu hanya tersedia sebagai pengguna admin, yang akan menyebabkan masalah baru
— Nico Haase

0

Di Ubuntu, alih-alih menggunakan sh scriptname.sh untuk menjalankan file, saya telah menggunakan. scriptname.sh dan berhasil! Baris pertama file saya berisi: #!/bin/bash

gunakan perintah ini untuk menjalankan skrip

.name_of_script.sh

1
Ini sudah dijawab beberapa kali. Harap berikan informasi lebih lanjut jika Anda menambahkan jawaban baru dalam kasus seperti itu
— Nico Haase

-3

Ini dapat membantu Anda, saya mendapatkan kesalahan ini karena saya mencoba memuat ulang .profileperintah saya . .profiledan ada kesalahan sintaksis


-6

Bourne shell (sh) menggunakan PATH untuk mencari di source <file> . Jika file yang Anda coba sumber tidak ada di jalur Anda, Anda mendapatkan kesalahan 'file tidak ditemukan'.

Mencoba:

source ./<filename>

5
Pos mengatakan sh: 1: source: not foundtidakfile not found
— Cristian Chaparro A.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.