Ini adalah file saya yang sebenarnya WASfile
#!/bin/sh
sed -i '/^ *$/d' WASfile
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;
Script to Add
read -p "Press [Enter] to continue for Installation"
Sekarang, saya ingin meletakkan skrip berikut di Script untuk Tambah di atas dan kemudian menjalankan skrip WASfile sebagai (yang merupakan kombinasi dari banyak skrip atau perintah).
#!/usr/bin/awk -f
BEGIN { FS="=" }
NR==FNR { a[$1]=$0; next }
$1 in a { $0=a[$1] }
/^#/ { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }
1
Saya ingin menggabungkan dan menggunakan seperti di bawah ini atau cara yang lebih baik untuk menggabungkan kedua skrip.
#!/bin/sh
sed -i '/^ *$/d' WASfile
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;
#!/usr/bin/awk -f
BEGIN { FS="=" }
NR==FNR { a[$1]=$0; next }
$1 in a { $0=a[$1] }
/^#/ { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }
1
read -p "Press [Enter] to continue for Installation"
Saya tidak dapat menjalankan Script.
Jadi, saya mencoba mengekstrak naskah AWK ke file lain dan mencoba menjalankan naskah AWK itu. Tapi, masalahnya adalah setelah mengekstraksi, skrip utama WASfile sendiri rusak atau gagal.
#!/bin/sh
sed -i '/^ *$/d' WASfile;
sed -i -e '/\/usr\/bin\/awk/,/baba/{w 1' -e 'd}' WASfile;
#!/usr/bin/awk -f
BEGIN { FS="=" } NR==FNR { a[$1]=$0; next } $1 in a { $0=a[$1] } /^#/ { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } } 1
baba
read -p "Press [Enter] to continue for Installation"
seperti di bawah ini
#./WASfile
sed: -e expression #1, char 24: missing command
./WASfile: line 6: BEGIN: command not found
./WASfile: line 7: {: command not found
./WASfile: line 7: next: command not found
./WASfile: line 8: in: command not found
./WASfile: line 9: syntax error near unexpected token `/^#/,'
./WASfile: line 9: `/^#/ { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } } '
WASfile
tetapi dalam skrip yang sama Anda mengedit file dengan nama yang sama dua kali (WASfile
dan dengan path lengkap/home/wasadm/WASfile
). Apakah seharusnya file yang sama dan Anda benar-benar ingin membuat kode modifikasi diri? Atau apakah Anda hanya menggunakan nama yang sama untuk skrip dan file yang sedang diedit? --- Saya akan sangat mencegah Anda dari kode modifikasi diri. Anda akan membutuhkan lebih banyak pengetahuan untuk membuatnya berfungsi dengan benar.Jawaban:
Dari pertanyaan Anda, saya mengerti bahwa skrip pertama Anda disimpan dalam file bernama
WASfile
. Anda harus memastikan bahwa skrip memiliki set bit yang dapat dieksekusi:Kemudian Anda dapat menjalankan script:
./WASfile
. Karena direktori saat ini tidak dalamPATH
variabel secara default, Anda harus secara eksplisit menentukan jalur untuk direktori saat ini./
atau jalur absolut/home/wasadm/WASfile
.Hal yang sama berlaku untuk skrip AWK: membuatnya dapat dieksekusi dan menyebutnya dengan jalur yang ditentukan.
Dari
WASfile
skrip Anda dapat menyebutnya dengan cara yang sama seperti dari baris perintah. Baris perintah juga merupakan shell - baik sama atau mirip dengan shell yang mengeksekusi skrip pertama.Kode di atas akan menjalankan
AWKscript
skrip yang disimpan di dalam/path/to/the
direktori. Dengan file sebagai parameter dengan nama deskripsi sendiri. Letakkan file yang Anda butuhkan di sana.Pilihan lain adalah memanggil
awk
secara eksplisit. Dalam kasus seperti itu Anda tidak perlu mengaktifkan bit file yang dapat dieksekusi.Potongan kode terakhir dalam pertanyaan tidak akan berfungsi
Kombinasi yang ditunjukkan di bagian terakhir kode Anda tidak akan berfungsi. Sistem mirip Unix dirancang untuk mengeksekusi satu file yang dapat dieksekusi oleh satu juru bahasa.
sumber
sed
kode, komentar lama saya masih berlaku.