Rắc rối trong tập lệnh với khoảng trắng trong tên tệp


11

Tôi đã có một tập lệnh scp là một tập tin từ máy chủ từ xa trở lại cục bộ. Đôi khi tên tệp chứa khoảng trắng. scp không thích khoảng trắng trong tên tệp của nó. Vì một số lý do, những nỗ lực của tôi trong việc xử lý các khoảng trắng không dẫn đến đường dẫn scp chính xác.

Mã số:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop

Kết quả trong

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg

Bao gồm PATH trong dấu ngoặc kép "$PATH"cho cùng một lỗi.

Việc hoán đổi các không gian cho các không gian thoát cũng không hoạt động, mặc dù theo như tôi có thể nói thì nên:

ESC_PATH=${PATH/' '/'\ '}

mặc dù in đường dẫn thoát cho thấy rằng chỉnh sửa đã hoạt động:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg

4
Vui lòng không sử dụng $PATHcho các biến của riêng bạn, vì thiết bị đầu cuối của bạn cần nó.
Bernhard

Câu trả lời:


19

Bạn nên trích dẫn cả khai báo và cách sử dụng

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

Nếu bạn không trích dẫn phần đầu tiên, $pathsẽ chỉ chứa phần đầu tiên. Nếu bạn không trích dẫn phần thứ hai, scpsẽ coi mỗi phần được phân tách bằng dấu cách.

(Tôi đã đổi $PATHthành $path$PATHlà một biến dành riêng quan trọng và bạn không được sử dụng nó cho mục đích chung.)


1
Hoàn hảo! Cảm ơn một triệu @Matteo. Hóa ra cũng có một không gian tiền tố ném cờ lê vào đó.
Miles Alden

1

Tôi đã thử một cái gì đó rất giống với ssh và truyền một dòng lệnh thông qua nó. ví dụ

ssh <somehost> ls -l "$PATH"

Tôi thấy rằng chỉ đơn giản là định nghĩa "$ PATH" đã không thực hiện được mánh khóe - nó vẫn phát sinh lỗi. Tuy nhiên nếu tôi chạy

ssh <somehost> ls -l "\"$PATH"\"

Điều này đã làm việc. Bí quyết là đảm bảo một bộ "" bổ sung được truyền cho lệnh ssh từ shell.

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.