cp không hoạt động trong kịch bản nhưng hoạt động trong thiết bị đầu cuối


7

Bây giờ, đây là một vấn đề kỳ lạ, tôi có loại kịch bản này:

CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
RESOURCES_PATH="${CWD}/resources"

PROJECT_NAME="something"

DRUSH_ALIASES_EXAMPLE_PATH="${RESOURCES_PATH}/example.aliases.drushrc.php"
DRUSH_ALIASES_PATH="~/.drush/${PROJECT_NAME}.aliases.drushrc.php"

cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}
echo "cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}"

Khi tôi đang cố chạy loại tập lệnh đó, tôi gặp lỗi: "cp: Không thể tạo tệp thông thường" ~ / .drush / Something.aliases.drushrc.php ". Không có tệp hoặc thư mục như vậy"

Nhưng điều buồn cười là, nếu tôi sẽ sao chép đầu ra của "echo" và dán trực tiếp vào terminal, lệnh sẽ hoạt động tốt. Tôi đang bối rối, có ý tưởng nào có thể sai với kịch bản trên không?

Câu trả lời:


11

Hãy thử sử dụng $HOME/.drush...thay vì ~/.drush....các "~"dường như không được mở rộng vào thư mục nhà của bạn.


6
Đúng, vì ~không được mở rộng khi trích dẫn. Tất nhiên, các lý lẽ để cpthực sự nên được trích dẫn là tốt, để tránh những bất ngờ.
derobert

1
~/"quoted name"cũng sẽ làm việc
Đánh dấu Plotnick

1

~tự dấu ngã có nghĩa là thư mục chính chỉ hoạt động ở đầu từ, ở đầu giá trị được gán hoặc (cho các mục đích của phép gán PATH) sau khi dấu hai chấm trong giá trị được gán. Nó không phải được trích dẫn.

~được mở rộng bởi shell, thực tế là bạn thấy nó được báo cáo cpcó nghĩa là bạn có vấn đề mở rộng shell.

Ở đây dấu ngã nằm trong dấu ngoặc kép, vì vậy nó không được mở rộng. Sử dụng một trong hai cách sau:

DRUSH_ALIASES_PATH=~/".drush/${PROJECT_NAME}.aliases.drushrc.php"
DRUSH_ALIASES_PATH="$HOME/.drush/${PROJECT_NAME}.aliases.drushrc.php"

0

Sử dụng bashbạn cũng có thể sử dụng thuê bao chuỗi nội bộ thông qua mở rộng tham số để thay thế ký tự dấu ngã ~bằng giá trị của $HOME.

Không thanh lịch, nhưng có thể hữu ích nếu bạn không chắc chắn về một ~ký tự có thể có trong chuỗi đường dẫn tệp được truyền cho bạn (không phải trường hợp ở đây).

unset HOME
HOME="$(eval 'echo ~')"

- cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}
+ cp "${DRUSH_ALIASES_EXAMPLE_PATH/#\~/${HOME}}" "${DRUSH_ALIASES_PATH/#\~/${HOME}}"
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.