Chuỗi `! 23` được thay thế bằng` docker` trong dòng lệnh


17

Tôi có một lệnh Maven với tham số:

mvn test -Dcommon_password=!23foo

Lệnh này đang được thực thi như

mvn test -Dcommon_password=dockerfoo

Tức !23là đang được thay thế bằng docker. Tại sao điều này xảy ra và làm thế nào tôi có thể tránh nó?

Câu trả lời:


43

Đây là mở rộng lịch sử : !23được thay thế bằng lệnh thứ 23 trong lịch sử của bạn.

Để tránh điều này, hãy sử dụng dấu ngoặc đơn:

mvn test '-Dcommon_password=!23foo'

5
hoặc vô hiệu hóa hoàn toàn với set +H/set +o histexpand
ilkkachu

12
Đây là một mật khẩu có khả năng chứa tất cả các loại siêu ký tự shell. Trích dẫn và thoát đúng như trong câu trả lời của M. Kitt tốt hơn là vô hiệu hóa chỉ một trong những khả năng có thể xảy ra. Tất nhiên, không có mật khẩu trong quá trình đối số ở vị trí đầu tiên sẽ vẫn tốt hơn . (-:
JdeBP

@JdeBP trong câu hỏi của tôi, tôi đã hiển thị một mật khẩu trong một văn bản đơn giản chỉ vì lý do đơn giản. Trong một dự án thực tế, đối số lấy giá trị từ một thông tin bí mật của Jenkins. Vì vậy, nó được đeo mặt nạ và an toàn.
Vitalii Plagov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.