2010-09-24 68 views
10

Tôi muốn thực hiện lệnh userland sẽ lấy một trong các đối số của nó (đường dẫn) và thay đổi thư mục thành thư mục đó. Sau khi hoàn thành chương trình, tôi muốn shell nằm trong thư mục đó. Vì vậy, tôi muốn thực hiện lệnh cd, nhưng với chương trình bên ngoài.Thay đổi thư mục làm việc trong shell bằng tập lệnh python

Nó có thể được thực hiện trong một tập lệnh python hay tôi phải viết trình bao bọc bash?

Ví dụ:

[email protected]:/home/$>python cd.py tdi 
[email protected]:/home/tdi$> 

Trả lời

14

Những người khác đã chỉ ra rằng bạn không thể thay đổi thư mục làm việc của cha mẹ từ một đứa trẻ.

Nhưng có một cách bạn có thể đạt được mục tiêu của mình - nếu bạn cd từ một hàm vỏ, nó có thể thay đổi thư mục làm việc. Thêm số này vào ~/.bashrc của bạn:

function go() 
{ 
    cd $(python /path/to/cd.py "$1") 
} 

Tập lệnh của bạn nên in đường dẫn đến thư mục mà bạn muốn thay đổi. Ví dụ, đây có thể cd.py của bạn:

#!/usr/bin/python 
import sys 
if sys.argv[1] == 'tdi': print '~/long/tedious/path/to/tdi' 
elif sys.argv[1] == 'xyz': print '~/long/tedious/path/to/xyz' 

Sau đó, bạn có thể làm:

 
[email protected]:/home/$> go tdi 
[email protected]:/home/tdi$> go tdi 
+0

cảm ơn, tôi chỉ muốn được rõ ràng về điều đó. – Darek

+1

Tôi đã viết một tập lệnh in "cd {directory}", mà tôi gọi với '\'./ change_dir \ '' (tức là, chạy tập lệnh nhưng bao quanh nó bằng các dấu gạch chéo ngược) Điều đó làm cho trình thông dịch thực thi bất cứ chương trình nào in ra stdout. – Shadow

4

Đó sẽ không thực hiện được.

Tập lệnh của bạn chạy trong một trình bao phụ được sinh ra bởi trình bao chính nơi lệnh được phát hành.

Bất kỳ cd thực hiện trong trình bao phụ không ảnh hưởng đến trình bao gốc.

0

Như codaddict viết, những gì xảy ra trong sub-shell của bạn không ảnh hưởng đến shell cha. Tuy nhiên, nếu mục tiêu của bạn là trình bày cho người dùng một trình bao trong một thư mục khác, bạn luôn có thể sử dụng Python os.chdir để thay đổi thư mục làm việc của trình vỏ con và sau đó khởi chạy một vỏ mới từ Python. Điều này sẽ không thay đổi thư mục làm việc của shell gốc, nhưng sẽ để người dùng với một thư mục khác trong một thư mục khác.

1

cd là độc quyền thực hiện như một lệnh nội bộ vỏ, bởi vì bất kỳ chương trình bên ngoài không thể thay đổi mẹ (?) CWD của vỏ.

-4

Tôi sẽ cố gắng chỉ cách thiết lập thư mục làm việc của thiết bị đầu cuối Bash cho bất kỳ đường dẫn nào mà chương trình Python muốn theo cách khá dễ dàng.

Chỉ Bash mới có thể đặt thư mục làm việc của nó, do đó, các thường trình là cần thiết cho Python và Bash. Chương trình Python có một quy trình được định nghĩa là:

fob=open(somefile,"w") 
fob.write(dd) 
fob.close() 

"Somefile" có thể thuận tiện là tệp đĩa RAM. Bash "mount" sẽ hiển thị tmpfs được gắn ở đâu đó như "/ run/user/1000", vì vậy somefile có thể là "/ run/user/1000/pythonwkdir". "dd" là tên đường dẫn thư mục đầy đủ mong muốn.

File Bash sẽ trông như thế:

#!/bin/bash 
#pysync ---Command ". pysync" will set bash dir to what Python recorded 
cd `cat /run/user/1000/pythonwkdr` 
+0

Tôi đã sửa định dạng của bạn, nhưng nghiêm túc, bạn thực sự không phải cố gắng hết sức, đó là một mớ hỗn độn hoàn toàn khó hiểu. – Ajean

+0

Ajean, Cảm ơn bạn. Bạn là một môn thể thao tốt. Tôi hy vọng bài viết sẽ giúp ích cho một số người. Nhưng không, tôi đã không cố gắng hết sức. Tôi không thích những người biên tập biết bạn muốn gì hơn bạn. Tôi đã viết một bài đăng hợp lý tốt, nhưng biên tập viên vẫn giữ xoài nó bởi vì tôi đã không nhấn phím nào đó. –

Các vấn đề liên quan