Saya melakukan ini dalam sebuah skrip:
read direc <<< $(basename `pwd`)
dan saya mendapatkan:
Syntax error: redirection unexpected
di mesin ubuntu
/bin/bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)
sementara saya tidak mendapatkan kesalahan ini di mesin suse lain:
/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
Mengapa kesalahan?
Jawaban:
Apakah referensi skrip Anda
/bin/bash
atau/bin/sh
dalam hash bang line? Shell sistem default di Ubuntu adalah dash , bukan bash , jadi jika Anda memilikinya#!/bin/sh
maka skrip Anda akan menggunakan shell yang berbeda dari yang Anda harapkan. Dash tidak memiliki<<<
operator pengalihan.sumber
Buruh pelabuhan:
Saya mendapatkan masalah ini dari Dockerfile saya seperti yang saya alami:
Namun, menurut masalah ini , diselesaikan:
Larutan:
Perhatikan kutipan di sekitar setiap parameter.
sumber
Jika Anda menggunakan yang berikut untuk menjalankan skrip Anda:
Maka Anda akan ingin menggunakan yang berikut ini sebagai gantinya:
Alasan untuk ini adalah bahwa Bash bukan shell default untuk Ubuntu. Jadi, jika Anda menggunakan "sh" maka itu hanya akan menggunakan shell default; yang sebenarnya Dash. Ini akan terjadi terlepas dari apakah Anda memiliki
#!/bin/bash
di bagian atas skrip Anda. Akibatnya, Anda perlu menentukan secara eksplisit untuk digunakanbash
seperti yang ditunjukkan di atas, dan skrip Anda harus berjalan sesuai harapan.Dash tidak mendukung pengalihan yang sama dengan Bash.
sumber
Anda bisa mendapatkan output dari perintah itu dan memasukkannya ke dalam variabel. lalu gunakan
heredoc
. sebagai contoh:dapat ditulis seperti:
dan seperti ini (ini yang Anda inginkan):
Contoh praktis di
busybox
bawahdocker
wadah:sumber
echo 'text' | nc
yang lebih pendek.lakukan dengan cara yang lebih sederhana,
Atau gunakan cangkangnya
sumber
Alasan lain untuk kesalahan ini adalah jika Anda menjalankan tugas cron yang memperbarui copy pekerjaan subversi dan kemudian telah mencoba untuk menjalankan skrip versi yang berada dalam keadaan yang bertentangan setelah pembaruan ...
sumber
Di mesin saya, jika saya menjalankan skrip secara langsung, defaultnya adalah
bash
.Jika saya menjalankannya
sudo
, defaultnya adalahsh
.Itu sebabnya saya memukul masalah ini ketika saya menggunakan
sudo
.sumber
Dalam kasus saya kesalahan adalah karena saya telah meletakkan ">>" dua kali
saya hanya memperbaikinya sebagai
sumber
Sebelum menjalankan skrip, Anda harus memeriksa baris pertama skrip shell untuk juru bahasa.
Misalnya: jika skrip dimulai dengan / bin / bash, jalankan skrip menggunakan perintah di bawah ini "bash script_name.sh"
jika skrip dimulai dengan / bin / sh, jalankan skrip menggunakan perintah di bawah "sh script_name.sh"
./sample.sh - Ini akan mendeteksi penerjemah dari baris pertama skrip dan jalankan.
Distribusi Linux yang berbeda memiliki cangkang yang berbeda sebagai default.
sumber