Có thể làm cho scp
thất bại khi bạn làm một bản sao địa phương? Tôi cảm thấy khó chịu khi vô tình tạo các tệp có tên như 192.168.11.5
khi tôi định nhập 192.168.11.5:
và từ đó sao chép tệp vào máy tính từ xa.
Có thể làm cho scp
thất bại khi bạn làm một bản sao địa phương? Tôi cảm thấy khó chịu khi vô tình tạo các tệp có tên như 192.168.11.5
khi tôi định nhập 192.168.11.5:
và từ đó sao chép tệp vào máy tính từ xa.
Câu trả lời:
Không phải theo mặc định, nhưng nếu bạn muốn một cái gì đó nhanh chóng, bạn có thể chỉ cần tạo một trình bao bọc xung quanh nó một cái gì đó như di chuyển nhị phân ban đầu sang scp.orig và có một tập lệnh shell mới lấy đầu vào, kiểm tra xem có: trong đầu vào và chuyển nó , nếu không nhắc tiếp tục?
Chỉnh sửa: Bài đăng này trả lời câu hỏi của tôi vì vậy tôi chấp nhận nhưng tôi muốn thêm chức năng shell mà tôi đã viết để giải quyết vấn đề cho tôi:
# Simple wrapper around scp to avoid forgotten colon's
scp() {
if [[ $@ == *:* ]]; then
# Looks like a valid command so run it
command scp "$@"
else
echo -n "Would you like to add a colon to the end of the function? [y/n] "
read response
if [ "$response" = "y" ]; then
command scp "$@":
else
command scp "$@"
fi
fi
}
Không có lựa chọn như vậy trong scp
. Bạn có thể viết một kịch bản lệnh bao bọc để kiểm tra các đối số. Đây là một (chưa được kiểm tra, gõ trực tiếp trong trình duyệt). Nó xác minh rằng đối số cuối cùng (đích) chứa a :
hoặc tất cả các đối số không phải tùy chọn trước đó (các nguồn) chứa a :
.
#!/bin/sh
eval "target=\${$#}"
case $target in
*:*) :;; # remote target
*) # local target
while getopts F:P:S:c:i:l:o:1246BCpqrv OPTLET; do :; done
i=$OPTIND
while [ $i -lt $# ]; do
i=$((i+1))
eval "source=\${$i}"
case $source in
*:*) :;; # remote source
*)
echo 1>&2 "Refusing to copy a local file to a local file with scp"
exit 99;;
esac
done
esac
exec scp "$@"
:
hoặc nếu có nhiều nguồn. Ngoài ra, bạn cần trích dẫn"$@"
, nếu không tập lệnh của bạn sẽ bị hỏng với một số tên tệp (đặc biệt nếu bạn chuyển các ký tự đại diện từ xa). Tôi cũng khuyên bạn nên kiểm tra thêm về đối số cuối cùng, để chỉ thêm một:
vào một cái gì đó trông giống như tên máy chủ.