Saya punya skrip bash postCloneSetup.sh:
script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd "$script_path"
printf 'Updating submodules for project\r\n'
git submodule update --init --recursive
printf '\r\nInitializing git hooks\n'
./GitHooks-BackEnd/init-hooks
printf '\r\nInitializing Submodule1\r\n'
$(./Submodule1/postCloneSetup.sh)
printf '\r\nInitializing Submodule2\r\n'
$(./Submodule2/postCloneSetup.sh)
Saya memicu skrip bash dari command prompt Windows.
postCloneSetup.sh
Ini membuka jendela lain dan kemudian kembali. Jendela yang dimunculkannya tetap terbuka dan mencatat teks keluaran.
Saya ingin menangkap output dari jendela spawned (teks yang ditulis ke konsol) dan mengembalikannya ke command prompt Windows.
Saya lebih suka menggunakan sesuatu seperti
$(postCloneSetup.sh) // Linux for capturing output to current context
untuk prompt perintah Windows.
Saya lebih suka tidak mengubah postCloneSetup.sh. Saya tahu saya bisa membuatnya menulis ke file dengan
exec &> postCloneSetupLog.log
tapi kemudian saya harus menunggu dan menjalankannya secara manual
type postCloneSetupLog.log
untuk melihat output di konsol. Ini tidak mungkin untuk diintegrasikan ke dalam mesin CI, yang merupakan tujuan saya.
Bagaimana saya bisa menangkap output dari konsol yang dihasilkan dalam satu perintah?
postCloneSetup.sh
, tetapi "skrip" lainnya hanya menjalankannya dari command prompt Windows. Di mesin CI itulah yang terjadi.Jawaban:
Jawaban singkat:
Untuk menggunakan Git Bash, dan jalankan
"%ProgramFiles%\Git\bin\bash.exe" script_name.sh
untuk menjalankan skrip"%ProgramFiles%\Git\bin\bash.exe" -c "echo 'it works'"
untuk menjalankan satu-linerKonteks:
Saya menemukan pertanyaan ini ketika mencari solusi untuk sesuatu yang serupa. Dalam pengaturan kami, kami menggunakan Git Bash di Windows (khususnya saat ini "GNU bash, versi 4.4.19 (1) -release (x86_64-pc-msys)") sebagai bagian dari lingkungan pengembangan untuk Windows, kami memiliki beberapa skrip yang ingin kami uji melalui GitLab CI persis di lingkungan ini: untuk mengeksekusi mereka di bawah Git Bash, dan melihat output dalam pekerjaan CI.
Apa yang berhasil bagi kami adalah mengeksekusi di
"%ProgramFiles%\Git\bin\bash.exe" script_name.sh
mana "script_name.sh" adalah skrip yang akan dieksekusi oleh bash (atau jika Anda perlu mengeksekusi hanya perintah inline"%ProgramFiles%\Git\bin\bash.exe" -c "echo 'it works'"
). Output dari skrip ini terlihat di jendela CMD, dan ditangkap oleh pekerjaan CI.Mungkin hasil yang serupa dapat dicapai dengan Windows Subsystem untuk Linux, tetapi karena Git Bash adalah persyaratan kami, kami tidak menyelidiki bagaimana hal itu dapat dilakukan dengan WSL.
Jadi, solusi / solusi yang saya usulkan dari pengalaman saya adalah menginstal "Git For Windows" https://gitforwindows.org/ (Git Bash adalah bagian dari itu), dan menjalankan skrip bash melalui Git Bash seperti dijelaskan di atas.
Topik Starter disebutkan bahwa menjalankan script dari CI adalah persis tujuannya (quote:
but the other "script" is just running it from the Windows command prompt. In the CI engine that is what is happening
, Link ), dan itu kasus kita gunakan juga, jadi saya menambahkan contoh konfigurasi CI pekerjaan (GitLab CI dalam kasus kami," .gitlab -ci.yml "). Adalah penting untuk membuat semua yang lolos benar untuk membuatnya bekerja, dan kami butuh beberapa kesalahan untuk melakukannya dengan benar:sumber
Tampaknya pertanyaan Anda sudah dijawab. https://stackoverflow.com/questions/2323292/windows-batch-assign-output-of-a-program-to-a-variable
Saya pikir Anda menginginkannya:
sumber