Saya menulis skrip bash yang menjalankan setiap argumennya sebagai perintah. Ini berfungsi untuk perintah di saya PATH
, tetapi tidak untuk alias. Saya bisa langsung memanggil alias dalam skrip, tetapi saya tidak bisa memanggil alias yang telah dilewati sebagai argumen.
Masalahnya (saya berasumsi) adalah bahwa alias diperluas sebelum variabel. Apakah ada cara untuk menjalankan alias dari suatu variabel?
Contoh skrip:
#!/bin/bash
# File: runall
shopt -s expand_aliases
source ~/.aliases
while (( "$#" )); do
$1
shift
done
runall "echo test"
bekerja, tetapi runall "myalias"
memberirunall: line 8: myalias: command not found
eval
variabel itu berbahaya ?eval "echo $1"
. Katakan aku menelepon./script.sh "hello;rm -rf ~
. Apa yang dieksekusi?echo hello
, diikuti olehrm -rf ~
. Jelas itu adalah contoh yang dibuat-buat, tetapi prinsipnya berlaku.eval
di depan$1
bekerja, karena saya sudah punyashopt -s expand_aliases
. Terima kasih!Saya memiliki masalah yang sama dan berhasil menyelesaikan masalah saya dengan mengubah alias saya ke fungsi, seperti yang dijelaskan di situs ini , yang bekerja untuk saya.
misalnya
untuk
sumber