`/ Bin / sh 'yang salah dimodifikasi

16

Saya punya skrip ini:

spd-say "Hello, don't forget the trash bin."

Jadi itu mengingatkan saya pada apa yang seharusnya saya lakukan, dan saya memindahkannya ke /usr/local/bin/dan perintah trashmengucapkan argumen, kemudian saya mengatur pekerjaan crontab , untuk membuatnya mengingatkan saya setiap hari apa yang ingin saya lakukan. Tetapi crontab tidak bekerja dan saya tidak mengerti mengapa (Ini melakukan pekerjaan lain dengan sempurna).

Setelah saya melihat pesan ini di terminal saya:

You have new mail in /var/mail/root

pada akhirnya baris ini membuat saya melakukan kesalahan buruk:

/bin/sh: 1: trash: not found

Saya tahu itu hal yang konyol untuk dilakukan tetapi saya lakukan:

mv /usr/local/bin/trash /bin/sh

berpikir itu shadalah direktori dan saya harus memindahkan skrip di sana untuk dieksekusi.

Sekarang, ketika saya ingin melihat halaman manual sistem mengatakan:

"Halo, jangan lupa tempat sampah."

Dan output dari cat shadalah:

#!/bin/bash
spd-say "Hello, don't forget the trash bin. "

Lagi pula, dapatkah saya melakukan sesuatu atau saya harus menginstal ulang sistem operasi saya?

Codito ergo sum
sumber
2
Saya berspekulasi, tetapi pekerjaan cron berjalan dengan lingkungan yang sangat terbatas, termasuk $ PATH dengan hanya beberapa direktori. Mungkin itu sebabnya ia bekerja dari terminal, tetapi tidak melalui cron. (Faktanya, ketika sesuatu bekerja dari terminal normal tetapi tidak melalui cron, itu hal pertama yang saya periksa.)
CVn
1
@ a CVn; Saya tidak tahu apa masalahnya, tetapi ketika saya mengganti spd-say dengan echo dan mengatur pekerjaan crontab: trash> ~ / Desktop / trash.txt **, berfungsi & file dibuat di Desktop saya. Saya pikir saya harus bertanya tentang hal itu dalam pertanyaan lain.
Codito ergo sum
Ya, jika Anda ingin bertanya tentang itu, silakan tanyakan sebagai pertanyaan terpisah.
CVn
'Sekarang, ketika saya ingin melihat halaman manual sistem mengatakan: ' Halo, jangan lupa tempat sampah'' Agar adil, paling mandocs adalah sampah (atau sulit dipahami)
LogicalBranch
8
@LogicalBranch I tidak setuju; Saya suka mereka, mereka kuat, panduan offline.
Codito ergo sum

Jawaban:

30

Dalam sistem Ubuntu, /bin/shadalah tautan simbolis ke dashshell secara default:

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jul  7  2018 /bin/sh -> dash

Jadi (anggap emulator terminal Anda menggunakan bash shell, dan tidak rusak karena kesalahan Anda) yang perlu Anda lakukan adalah membuat kembali tautan:

sudo ln -sf dash /bin/sh
Steeldriver
sumber
14
OP: mv /usr/local/bin/trash /bin/sh ,sh: Anda tidak bisa hidup dengan kegagalan Anda sendiri, di mana itu membawa Anda? Kembali padaku.
LogicalBranch
2
@LogicalBranch bagaimana Anda hanya memiliki 1 upvote untuk mahakarya itu?
vikarjramun
4
@vikarjramun kedengarannya seperti sebuah mahakarya tetapi saya hanya tidak mengerti ...
Nacht - Reinstate Monica
@ Kapal dari Avengers: Endgame; garis dari penjahat, Thanos.
Cullub
@Cullub Oooooh ..... terima kasih ... Saya cukup yakin saya mengerti sekarang ...
Nacht - Reinstate Monica
7

Tidak, Anda tidak perlu menginstal ulang sistem Anda. / bin / sh hanyalah softlink ke shell Anda. readlink -f /bin/sh /bin/bashDalam kasus saya bash. Pindahkan skrip Anda dan buat softlink ke shell favorit Anda.

tak seorangpun
sumber
10
/ bin / sh seharusnya menunjuk ke / bin / dash. Jika Anda ingin mengganti shell sistem, gunakan sudo dpkg-reconfigure dash, per Bagaimana Saya Dapat Membuat / bin / sh menunjuk ke / bin / bash? . Perhatikan juga shell sistem bukan shell interaktif default.
wjandrea