Tôi muốn tạo một tập lệnh cập nhật tất cả kho lưu trữ GitHub của mình.Tại sao tập lệnh Git auto-update Expect của tôi không hoạt động?
Tôi chỉ cần nhập Tên người dùng và Mật khẩu của mình và tập lệnh sẽ đi qua danh sách các vị trí lưu trữ, gọi git push
và cung cấp thông tin cần thiết qua tập lệnh Mong đợi bổ sung.
Đây là kịch bản bash của tôi:
#! /bin/bash
echo "Updating GitHub projects from project_list.txt."
echo
read -p "GitHub username: " un
read -p "GitHub password: " -s pw
echo
echo
while read line
do
eval dir=$line
echo "Updating:" $dir"."
cd $dir
$SF/githubexpect $un $pw
echo
echo
done < $SF/project_list.txt
$SF
là một biến môi trường toàn cầu có chứa một đường dẫn tuyệt đối đến thư mục kịch bản của tôi.
Đây là kịch bản githubexpect:
#! /usr/bin/expect
set un [lindex $argv 0]
set pw [lindex $argv 1]
spawn git push
expect "Username"
send $un\n
expect "Password"
send $pw\n
Khi tôi chạy kịch bản bash, mọi thứ đi như mong đợi.
- Tôi được nhắc nhập thông tin.
- Tập lệnh bắt đầu thành công và tiếp tục đọc tệp
project_list.txt
. - Sau khi tìm thấy chính nó trong thư mục của kho lưu trữ, nó gọi tập lệnh githubexpect và một cách chính xác chuyển vào thông tin (Tôi đã thử nghiệm điều này).
- githubexpect xuất hiện chính xác
git push
. - Nó được nhắc nhập liệu (tôi thấy điều này trong bảng điều khiển).
- Nó cung cấp thông tin của tôi (một lần nữa, tôi cũng thấy điều này).
- Sau đó, nó chỉ tiếp tục đến kho lưu trữ tiếp theo như không có gì xảy ra. < - Lỗi!
Tôi nghi ngờ rằng kịch bản githubexpect có thể đẻ trứng git push
so với chính nó, và không phải là thư mục kịch bản hiện nay đang được thực hiện trong, vì vậy git thậm chí không tìm thấy một kho lưu trữ. Điều này có lẽ sai mặc dù là thư mục kịch bản của tôi, trong đó githubexpect cư trú, cũng là một kho lưu trữ.
Nó hoạt động ngay bây giờ! Bạn có thể giải thích lý do tại sao các chương trình trả về 'eof' khi chúng được thực hiện? Cảm ơn. – corazza
Điều đó có vẻ giống như một câu hỏi SO tuyệt vời :) – jarodeells
Nó không nhất thiết phải là chương trình trả về eof: thoát khỏi chương trình sinh ra, và Mong đợi xảy ra để sử dụng từ khóa "eof" cho điều kiện đó. –