GNU/Linux >> Belajar Linux >  >> Linux

Melarikan diri dari karakter bintang (*) di bash

  1. Selalu beri tanda kutip ganda di sekitar penggantian variabel, jika tidak, karakter seperti spasi dan * muncul dalam nilai ditafsirkan oleh shell. Yaitu, tulis "$c" , bukan $c .

  2. Sintaks mysql <"$c" membuat mysql mengeksekusi perintah dari file yang namanya adalah nilai $c . Yang Anda cari adalah

    printf '%s\n' "$c" | mysql
    

    atau lebih sederhana, selama Anda mengingat batasannya ($c tidak boleh dimulai dengan - , dan jika berisi \ tidak apa-apa di bash tetapi tidak di beberapa varian sh lainnya)

    echo "$c" | mysql
    

    Ada alternatif lain yang lebih nyaman jika perintahnya multiline. Ini disebut "dokumen di sini". String EOF tidak istimewa (meskipun tradisional), urutan huruf dan angka apa pun bisa digunakan. EOF terminasi mungkin tidak didahului oleh spasi putih. Anda harus memasukkan \ sebelum setiap $ , \ dan ` kecuali jika Anda ingin mereka ditafsirkan oleh shell.

    mysql <<EOF
    GRANT ALL ON *.* TO '$1'@'localhost';
    EOF
    
  3. Berhati-hatilah jika argumen ke shell berisi kutipan tunggal, Anda memiliki vektor injeksi. Cuplikan berikut menambahkan \ sebelum setiap \ dan ' .

    set -- "${1//\\/\\\\}"
    set -- "${1//\'/\'}"
    

    Ini cukup jelek, itulah sebabnya jika Anda akan melakukan sesuatu yang rumit, lupakan tentang menggunakan shell dan gunakan bahasa dengan binding SQL yang sebenarnya (perl, python, apa pun) di mana perpustakaan menangani semua kutipan dan pembuatan prosedur untuk Anda .


Gunakan tanda kutip tunggal untuk string Anda:

c='GRANT ALL ON *.* TO';
c="${c} '$1'@'localhost';";

Mungkin ada cara yang lebih baik untuk melakukannya, tetapi memasukkan $1 ke dalam string membuatnya aneh


Ini akan berfungsi di bash, tidak perlu melarikan diri

#!/bin/bash
mysql -u root -e "GRANT ALL ON *.* TO '$1'@'localhost'"
exit 0;

Linux
  1. Skrip bash(I)

  2. Apakah Mungkin Mendapatkan Karakter Di Kursor Terminal Menggunakan Kode Ansi Escape?

  3. Jalankan perintah bash pada pipa jenkins

  1. Mengapa Saya Tidak Dapat Keluar dari Spasi Pada Skrip Bash??

  2. gema karakter baris baru tidak berfungsi di bash

  3. Remap Ctrl-A di Layar GNU

  1. Variabel Ekspor Bash

  2. Perintah tunggu bash

  3. Menyortir dalam bash