Saya memiliki perintah umum yang dipanggil dari dalam direktori yang sangat spesifik. Hanya ada satu executable yang ada di / bin untuk program ini, dan direktori kerja saat ini sangat penting untuk menjalankannya dengan benar. Skrip mempengaruhi file yang tinggal di dalam direktori yang dijalankannya.
Sekarang, saya juga memiliki skrip shell khusus yang melakukan beberapa hal dalam satu direktori, tetapi saya perlu memanggil perintah yang disebutkan di atas seolah-olah itu ada di direktori lain.
Bagaimana Anda melakukan ini dalam skrip shell?
bash
shell
working-directory
Marty Wallace
sumber
sumber
Jawaban:
Anda dapat menggunakan
cd
bawaan, ataupushd
danpopd
bawaan untuk tujuan ini. Sebagai contoh:# do something with /etc as the working directory cd /etc : # do something with /tmp as the working directory cd /tmp :
Anda menggunakan builtin seperti perintah lainnya, dan dapat mengubah konteks direktori sebanyak yang Anda suka dalam sebuah skrip.
sumber
cd -
di shell POSIX untuk kembali ke direktori sebelumnya. Yang mengatakan, (a)pushd
danpopd
benar-benar dimaksudkan untuk penggunaan interaktif, dan (b) tidak selalu aman untuk mengasumsikan bahwa Anda dapatcd
kembali ke tempat Anda memulai, terutama di subsistem kompleks yang mungkin menggunakan izin terbatas secara internal (lihat stackoverflow.com/questions/ 10555284 /… ).popd
.:
simbol di sini?man bash
bacaan yang relevan :: [arguments]
Tidak berpengaruh; perintah tidak melakukan apa pun selain memperluas argumen dan melakukan pengalihan yang ditentukan. Status pengembalian adalah nol.Gunakan
cd
di subkulit; cara singkat untuk menggunakan subkulit semacam ini adalah dengan tanda kurung.(cd wherever; mycommand ...)
Yang mengatakan, jika perintah Anda memiliki lingkungan yang diperlukan, itu harus benar-benar memastikan lingkungan itu sendiri daripada menempatkan tanggung jawab pada apa pun yang mungkin ingin menggunakannya (kecuali itu adalah perintah internal yang digunakan dalam keadaan yang sangat spesifik dalam konteks sumur. mendefinisikan sistem yang lebih besar, sehingga setiap pemanggil sudah perlu memastikan lingkungan yang dibutuhkannya). Biasanya ini akan menjadi semacam pembungkus skrip shell.
sumber
\
setelah masing;
- masing untuk perintah multi-baris dalam konteks yang sama.(cd /path/to/your/special/place;/bin/your-special-command ARGS)
sumber
Jika Anda ingin kembali ke direktori kerja Anda saat ini:
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
current_dir
sama dengan Andapwd
cd
ke tempat Anda perlu menjalankan perintah Andacd
kembali ke variabel kitacurrent_dir
Solusi Lain oleh @apieceofbart
pushd && YOUR COMMAND && popd
sumber
pushd && YOUR COMMAND && pulld
popd
bukanpulld
.