Untuk menjalankan perintah dengan direktori kerja tertentu, biasanya dilakukan
( cd directory && utility )
Tanda kurung di sekitar cd ...
berarti bahwa perintah di dalamnya berjalan dalam subkulit. Mengubah direktori yang berfungsi dalam subkulit membuatnya sehingga direktori kerja saat ini dari shell panggilan tidak berubah, yaitu, setelah memanggil perintah ini, Anda masih akan berada di direktori yang sama di mana Anda memulai.
Contoh:
( cd / && echo "$PWD" ) # will output "/"
echo "$PWD" # will output whatever directory you were in at the start
Ini tidak dapat diubah menjadi alias umum karena alias tidak dapat menerima argumen apa pun.
Untuk spesifik direktori dan utilitas, yang bisa melakukan
alias cdrun='( cd "$HOME/somedir" && ./script.sh )'
tetapi untuk kasus umum, Anda harus menggunakan fungsi shell:
cdrun () {
( cd "$1" && shift && command "$@" )
}
atau
cdrun () (
cd "$1" && shift && command "$@"
)
Mengganti kurung kurawal dengan tanda kurung di sekitar tubuh fungsi membuat fungsi mengeksekusi dalam subkulitnya sendiri.
Ini akan digunakan sebagai
$ cdrun "$HOME/somedir" ./script.sh
yang akan menjalankan skrip yang script.sh
terletak di direktori $HOME/somedir
, dengan $HOME/somedir
sebagai direktori kerja, atau
$ cdrun / ls -l
yang akan memberi Anda daftar direktori dalam "format panjang" dari direktori root.
Fungsi shell mengambil argumen pertamanya dan mencoba mengubah ke direktori itu. Jika itu berhasil, itu menggeser nama direktori dari parameter posisi (daftar argumen baris perintah) dan mengeksekusi perintah yang diberikan oleh sisa argumen. command
adalah perintah bawaan di shell yang hanya menjalankan argumennya sebagai perintah.
Semua ini diperlukan jika Anda ingin menjalankan perintah dengan direktori kerja yang diubah . Jika Anda hanya ingin mengeksekusi perintah yang berlokasi di tempat lain, Anda jelas dapat menggunakannya
alias thing='$HOME/somedir/script.sh'
tapi ini akan menjalankan script.sh
terletak di $HOME/somedir
dengan saat ini direktori sebagai direktori kerja.
Cara lain untuk mengeksekusi skrip yang berlokasi di tempat lain tanpa mengubah direktori kerja adalah dengan menambahkan lokasi skrip ke PATH
variabel lingkungan Anda , mis
PATH="$PATH:$HOME/somedir"
Sekarang script.sh
di $HOME/somedir
akan dapat dijalankan dari mana saja dengan hanya menggunakan
$ script.sh
Sekali lagi, ini tidak mengubah direktori kerja untuk perintah.
cdrun () ( cd "$1" && shift && command "$@" )
.