Tôi có tập lệnh shell mà tôi gọi sử dụng osascript
và osascript
gọi tập lệnh shell và chuyển vào biến mà tôi đã đặt trong tập lệnh shell gốc. Tôi không biết làm thế nào để vượt qua biến đó từ từ bản thảo đến kịch bản lệnh shell.Vượt qua biến từ kịch bản lệnh shell thành dạng chữ viết hoa
Làm cách nào để chuyển một biến từ kịch bản lệnh shell sang tập lệnh con trỏ tới tập lệnh shell ...?
Hãy cho tôi biết nếu tôi không hiểu.
i=0
for line in $(system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'); do
UDID=${line}
echo $UDID
#i=$(($i+1))
sleep 1
osascript -e 'tell application "Terminal" to activate' \
-e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
-e 'tell application "Terminal" to do script "cd '$current_dir'" in selected tab of the front window' \
-e 'tell application "Terminal" to do script "./script.sh ip_address '${#UDID}' &" in selected tab of the front window'
done
Đây là lời khuyên không tốt. Ngoài việc vụng về không cần thiết, nó không làm vệ sinh văn bản được chèn vào nên không mạnh mẽ và không an toàn, ví dụ: 'text = 'Bob nói" hello "'' sẽ gây AS để ném một lỗi cú pháp do dấu ngoặc kép không thoát. Không bao giờ sử dụng mã munging nếu một giải pháp tốt hơn tồn tại, mà nó làm: như Lauri Ranta nói, xác định một xử lý 'chạy' rõ ràng và vượt qua dây của bạn thông qua ARGV. Xem http://stackoverflow.com/questions/16966117/bash-combining-variables-to-form-a-command-sent-to-applescript-using-the-osascr/16977401#16977401 để biết thêm chi tiết. – foo
@foo Bạn nói đúng, sử dụng 'khi chạy argv' là" đúng "hơn. Của tôi không phải là một giải pháp _perfect_, nhưng tôi sử dụng nó bản thân mình nhiều lần mà không có bất kỳ vấn đề, nó là đơn giản và có thể sử dụng cho nhiều kịch bản ... – jm666
Yours là một giải pháp _buggy_. Nếu $ text chứa các ký tự dấu ngoặc kép hoặc dấu gạch chéo ngược, nó sẽ làm cho mã AS bị lỗi hoặc - tệ hơn - hành xử theo các cách không mong muốn. Nếu bạn phải sử dụng mã munging, bạn _must_ khử trùng các đầu vào của bạn. ví dụ. Google "tấn công SQL injection" để hiểu tại sao "nó làm việc cho tôi" là _not_ một phản ứng thích hợp khi ai đó chỉ ra lỗ hổng này. – foo