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?

Milad
sumber
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.

choroba
sumber
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
Guru
sumber
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

shlsy
sumber
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
31

The sourcebuiltin adalah bashism a. Tulis ini hanya sebagai. gantinya.

misalnya

. $FILE

# OR you may need to use a relative path (such as in an `npm` script):

. ./$FILE

https://wiki.ubuntu.com/DashAsBinSh#source

Travis Clarke
sumber
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
Mojtaba Yousefi
sumber
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
mah
sumber
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 (.)

GangaRam Dewasi
sumber
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.

Gord Tunggu
sumber
0

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

sudo -s source ./filename.sh

swati jain
sumber
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
DInfo2019
sumber
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

Ngarai Kolob
sumber
-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>
mosu
sumber
5
Pos mengatakan sh: 1: source: not foundtidakfile not found
Cristian Chaparro A.