GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Skrip Bash Tidak Mengenal Alias?

Di ~/.bashrc saya file berada dalam dua definisi:

  1. commandA , yang merupakan alias ke jalur yang lebih panjang
  2. commandB , yang merupakan alias untuk skrip Bash

Saya ingin memproses file yang sama dengan dua perintah ini, jadi saya menulis skrip Bash berikut:

#!/bin/bash

for file in "[email protected]"
    do
    commandA $file
    commandB $file
done

Bahkan setelah keluar dari sesi saya dan masuk kembali, Bash meminta saya dengan command not found kesalahan untuk kedua perintah saat saya menjalankan skrip ini.

Apa yang saya lakukan salah?

Jawaban yang Diterima:

Pertama-tama, seperti yang dikatakan ddeimeke, alias secara default tidak diperluas di shell non-interaktif.

Kedua, .bashrc tidak dibaca oleh shell non-interaktif kecuali Anda mengatur BASH_ENV variabel lingkungan.

Tapi yang paling penting:jangan lakukan itu! Tolong? Suatu hari Anda akan memindahkan skrip itu ke suatu tempat di mana alias yang diperlukan tidak disetel dan itu akan rusak lagi.

Alih-alih, tetapkan dan gunakan variabel sebagai pintasan dalam skrip Anda:

#!/bin/bash

CMDA=/path/to/gizmo
CMDB=/path/to/huzzah.sh

for file in "[email protected]"
do
    $CMDA "$file"
    $CMDB "$file"
done

Linux
  1. Bisakah Skrip Bash Dihubungkan ke File?

  2. Mengapa ~/.bash_profile Tidak Berfungsi?

  3. Mengapa "Sudo Su" Dalam Skrip Shell Tidak Menjalankan Skrip Lainnya Sebagai Root?

  1. Basa'?

  2. Bash Script Untuk Menghapus File Terlama Dari Folder A?

  3. Alternatif Untuk 'dd' Yang Tidak Memotong File?

  1. Mengapa Skrip Bash Tidak Keluar Setelah Eksekusi?

  2. Mengapa File Terjemahan Bash Tidak Berisi Semua Teks Kesalahan?

  3. Mengapa Ls -l Tidak Menunjukkan Waktu Dan Atau Tahun Untuk Setiap File??