Không có nghĩa là cd cd & mấy?


8

Tôi biết cách thay đổi thư mục từ terminal bằng cách gõ

cd <directory>

nhưng đây là kịch bản. Tôi đã sử dụng thiết bị đầu cuối để đi vào thư mục git repository của tôi.

  • kho lưu trữ
    • kho lưu trữ glenn-remdroid

Với cấu trúc thư mục ở trên, tôi muốn chuyển đổi glenn-remdroid-repositoryvì nó là kho lưu trữ của tôi bằng cách thực hiện.

cd glennRepositories

Trước khi chuyển đổi trong kho lưu trữ glenn-remdroid, tôi đã gõ nhầm

cd & 

thay vì cd *. Tôi đã sử dụng cd *vì tên thư mục là dài đối với tôi, xin lỗi vì lười biếng.

Khi tôi thực thi cd &, thiết bị đầu cuối trả lời

[1] 7519

Khi tôi thực hiện cd *điều này bây giờ đã xảy ra

[1]+  Done                    cd  (wd: ~/glennRepositories)
(wd now: ~/glennRepositories/glenn-remdroid-repository)

Có ai cd &có nghĩa là gì và đầu ra của nó? Google không biết câu hỏi của tôi :)


1
Một cái gì đó không thể tìm thấy với Google là ogooglebar , một chủ nghĩa thần kinh Thụy Điển.
Chloe

Khi tôi nhập câu hỏi của mình, kết quả tìm kiếm là về đĩa Compact. Không thể tin được :)
GLenn

3
"Tôi đã sử dụng cd * vì tên thư mục dài đối với tôi, xin lỗi vì lười biếng". Chỉ cần gõ cd <TAB>và tên của thư mục duy nhất sẽ được mở rộng tự động.
Bakuriu

Câu trả lời:


20

Bằng cách viết &vào cuối dòng lệnh, bạn đang hướng dẫn shell của bạn lấy đường ống lệnh (trong trường hợp này là một lệnh đơn) và chạy nó trong một vỏ con trong nền (không chờ kết quả). cdlà một bash dựng sẵn, nhưng điều đó không quan trọng ở đây. Nó sẽ không ảnh hưởng đến trình bao "cha mẹ" của bạn theo bất kỳ cách nào, vì vậy thư mục làm việc của bạn sẽ không bị thay đổi.

[1] 7519

Dòng này đang báo cáo rằng có một công việc đang chạy trong nền được xác định bởi số 1 và ID tiến trình là 7519. Một điều tương tự sẽ được in nếu bạn chạy ví dụ vimvà sau đó nhấn Ctrl+ Zđể tạm dừng nó. Khi quá trình kết thúc, shell sẽ không báo cáo rằng cho đến chu kỳ xử lý tiếp theo (ví dụ: chỉ cần nhấn Returnmột lần nữa) và sau đó nó sẽ in các công việc liệt kê cập nhật kết thúc.

Để biết thêm chi tiết xin vui lòng đọc man bashvà phần JOB CONTROL.

Để tham khảo, câu hỏi Tại sao exit &không hoạt động? mang một số điểm tương đồng.


Việc kết thúc công việc được báo cáo ngay lập tức hay tại dấu nhắc tiếp theo tùy thuộc vào trình bao. Trong fishzsh, nó được báo cáo ngay lập tức. Trong bashvà các vỏ POSIX khác hoặc (t) csh, nó phụ thuộc vào cài đặt của notifytùy chọn (tắt theo mặc định) ( zshlà một vỏ giống POSIX cũng có một notifytùy chọn, nhưng nó bị tắt theo mặc định trừ khi được yêu cầu mô phỏng một vỏ khác)
Stéphane Chazelas

1

Các &nhà điều hành sẽ gửi một quá trình để nền; như cdcó thể được chạy mà không có đối số bạn đang chạy nó và gửi nó đến nền. Nếu bạn lấy trang người đàn ông:

TÊN

cd - Thay đổi thư mục làm việc shell.

TÓM TẮC

cd[ -L| -P] [ dir ]

SỰ MIÊU TẢ

Thay đổi thư mục làm việc shell.

Thay đổi thư mục hiện tại thành DIR . Giá trị mặc định DIR là giá trị của các HOMEbiến shell.

Biến CDPATHxác định đường dẫn tìm kiếm cho thư mục chứa DIR . Tên thư mục thay thế CDPATHđược phân tách bằng dấu hai chấm (:).
Tên thư mục null giống với thư mục hiện tại. Nếu DIR bắt đầu bằng dấu gạch chéo ( /), thì CDPATHkhông được sử dụng.

Nếu không tìm thấy thư mục và tùy chọn shell cdable_varsđược đặt, từ được coi là tên biến. Nếu biến đó có một giá trị, giá trị của nó được sử dụng cho DIR .

Tùy chọn:

-Lbuộc các liên kết tượng trưng được tuân theo
-Psử dụng cấu trúc thư mục vật lý mà không theo các liên kết tượng trưng

Mặc định là theo các liên kết tượng trưng, ​​như thể -Lđược chỉ định.

Trạng thái thoát:

Trả về 0 nếu thư mục bị thay đổi; khác không.

XEM THÊM

bash(1)

THỰC HIỆN

GNU bash, phiên bản 4.1.5 (1) -release (i486-pc-linux-gnu)
Bản quyền (C) 2009 Free Software Foundation, Inc.
License GPLv3 +: GNU GPL phiên bản 3 trở lên

Bạn có thể thấy các đối số là tùy chọn. Vì thế

cd &được xử lý như cdsau đó gửi đến nền. Khi cdđược gọi mà không có đối số thì không cần xử lý. Vì vậy, nó đi đến nền là "thực hiện" (xử lý).

Một số thông tin liên quan đến & Bash &(ampersand) là toán tử điều khiển dựng sẵn được sử dụng để xử lý các quá trình. Từ trang man Bash, "Nếu một lệnh bị chấm dứt bởi toán tử điều khiển &, shell sẽ thực thi lệnh trong nền trong một khung con".

Nếu đăng nhập vào một vỏ tương tác, quy trình được gán một số công việc và PID con được hiển thị. Số công việc dưới đây là một.

bash$ sleep 30 &
[1] 3586

Lưu ý rằng khi một quá trình được rẽ nhánh, PID con được lưu trữ trong biến đặc biệt $!

bash$ echo $!
3586

Bạn có thể chấm dứt công việc theo số công việc như vậy:

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$

5
Gần, nhưng không hoàn toàn. Đầu tiên, nó không phải cdlà chạy và sau đó được gửi đến nền. Quá trình nền thực sự được tạo trước khi chương trình chạy trong trường hợp lệnh thông thường; trong trường hợp tích hợp sẵn, hành vi này được mô phỏng. Lệnh được chạy bởi quá trình nền này, thay thế nó. Thứ hai, cdkhông có đối số sẽ làm một cái gì đó: nó đưa bạn đến HOMEthư mục của bạn . Nhưng, vì bạn đã bỏ nó vào nền, nên không có tác dụng gì trong trường hợp này.
Warren Young

@WarrenYoung từ trang chủ nó nói cd sẽ lấy thư mục chính nếu không có giá trị nào được gán cho nó. Khi thay đổi thư mục thành công, nó có nhận được giá trị của $ pwd không?
vfbsilva

1
Thư mục làm việc hiện tại của quá trình nền bị ảnh hưởng, không phải là vỏ Bash nền trước.
Warren Young
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.