Apakah ada cara untuk mengeksekusi perintah di direktori yang berbeda tanpa harus melakukannya cd
? Saya tahu bahwa saya bisa cd
masuk dan cd
keluar, tetapi saya hanya tertarik pada kemungkinan untuk menghentikan langkah-langkah tambahan :)
linux
bash
cd-command
Naftuli Kay
sumber
sumber
echo "#!/bin/bash; cd $1; exec $2" > /usr/local/bin/execindirectory; chmod +x /usr/local/bin/execindirectory
. Mungkin perlu sedikit usaha jika Anda ingin itu benar-benar mendukung opsi "tag" seperti-d
dan lainnya.Jawaban:
Saya tidak tahu apakah ini penting, tetapi Anda dapat membuat subkulit:
Direktori hanya diubah untuk subkulit itu, sehingga Anda menghindari pekerjaan yang perlu dilakukan
cd -
setelahnya.sumber
$ (cd /var/log && cp *.log ~/Desktop)
. Dengan begitu, jika direktori tidak ada, tidak ada perintah lebih lanjut yang dijalankan.Beberapa program memiliki pilihan yang Anda dapat memberitahu mereka untuk chdir (2) diri mereka sendiri (misalnya GNU tar ‘s
-C
/--directory
).Di luar program semacam itu, sesuatu harus chdir . Anda dapat menulis dan menggunakan semacam program "biner" yang dikompilasi alih-alih membuat shell melakukannya, tetapi mungkin tidak akan menghasilkan banyak manfaat.
Dalam komentar di jawaban lain, Anda memberi contoh:
Karena
*.log
polanya diperluas oleh shell itu sendiri (bukan cp ), sesuatu harus chdir ke direktori sebelum shell mengevaluasi perintah Anda.Jika Anda hanya tertarik untuk menghindari "cd back", maka Anda dapat menggunakan subshell untuk mengisolasi efek dari cd dari instance shell Anda.
Anda dapat mengemas ini dalam fungsi shell. (Saya menjatuhkan
-d
opsi dari contoh penggunaan Anda karena ada sedikit poin untuk perintah ini jika direktori sebenarnya opsional.)sumber
Bukan untuk merusak nilai jawaban yang diberikan oleh orang lain, tapi saya yakin yang Anda inginkan adalah ini:
Perhatikan parens yang akan dipanggil
cd
dalam sub-shell.sumber
Ini adalah sesuatu yang seharusnya membuat Anda
cd
kembali ke tempat Anda sebelumnya (menggunakan Bash), karena tidak lupa untuk melakukannya sepertinya menjadi tujuan pertanyaan:(EDIT: versi yang sedikit lebih pendek, terima kasih kepada @ Random832)
sumber
pushd other-dir
, alih-alihpushd .; cd other-dir
Sayangnya, contoh Anda:
tidak perlu perubahan ke dir, karena
akan melakukan hal yang sama. Tidak bisakah Anda mendekati masalah Anda yang sebenarnya? Karena kita mungkin tahu solusi yang lebih baik untuk itu juga.
Cara rumit untuk menyelesaikan masalah Anda, yang jauh dari keanggunan solusi Michaels, adalah penggunaan find, yang memiliki sakelar '-execdir' untuk dijalankan dalam direktori, tempat file ditemukan. Diadopsi dengan buruk untuk contoh Anda:
Mungkin ini berguna untuk masalah Anda yang sebenarnya. -okdir bukannya -execdir akan meminta Anda untuk mengonfirmasi setiap doa.
-okdir dan -execdir mungkin perlu diinstal gnu-find, yang biasanya digunakan di Linux.
sumber
Bagaimana dengan
./your/path/command.sh
?sumber
execindirectory -d /var/log "cp *.log ~/Desktop"
.