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.