Kemungkinan kutipan perintah shell ad-hoc di dalam tanda kutip - Bagaimana cara melarikan diri?

Saya memiliki perintah adhoc yang agak sederhana menggunakan shell untuk menjalankan chfn:

ansible all -i ./inventory/all  -s -K -m shell -a 'chfn -f "$HOSTNAME root" root'

chfn memerlukan tanda kutip ganda, dan saya telah mencoba beberapa cara berbeda untuk menghindarinya tetapi tidak berhasil. Saya sudah mencoba membungkus perintah shell dalam tanda kutip ganda dan tanda kutip tunggal, dan menggunakan / untuk menghindari tanda kutip ganda dan mencoba tanda kutip tunggal juga. Menjalankan chfn -f "$HOSTNAME root" root berfungsi dengan baik tetapi saya tidak tahu cara menjalankannya dengan cara ini. (Saya tahu ini sebuah pilihan, tapi saya lebih suka tidak mengubahnya menjadi skrip shell dan menjalankannya seperti itu melalui kemungkinan jika memungkinkan)


person Blake    schedule 15.05.2017    source sumber


Jawaban (2)


Bila Anda memiliki tanda kutip bertingkat, seperti contoh di bawah, Anda dapat menghilangkan tanda kutip tunggal dengan meng-escapenya dengan tanda kutip tunggal lainnya.

Jadikan tanda kutip di sekitarnya sebagai tanda kutip tunggal ', maka Anda tidak perlu keluar dari tanda kutip ganda " dan Anda dapat keluar dari tanda kutip tunggal dalam perintah Anda dengan tanda kutip tunggal lainnya seperti ''

 - name: Notify on slack
    command: 'curl -X POST -H ''Content-type: application/json'' --data ''{"text":"{{inventory_hostname}} has been updated"}'' https://hooks.slack.com/services/XXXX/YYY/ZZZ'
    when: inventory_hostname == 'host1.de' or inventory_hostname == 'host.de'
    delegate_to: localhost
person Ralf Kramer    schedule 23.10.2018

mungkin rumit tentang hal ini dalam perintah ad hoc. jika Anda ingin meneruskannya apa adanya, Anda harus menghindari tanda kutip. beberapa contoh di bawah ini:

ansible localhost -a 'echo \"$HOSTNAME\"'
localhost | SUCCESS | rc=0 >>
"$HOSTNAME"

ansible localhost -a "echo $HOSTNAME"
localhost | SUCCESS | rc=0 >> 
my_hostname
person Steve Miskiewicz    schedule 09.01.2018