2012-02-15 37 views
6

Tại sao không có tác phẩm sau?Sử dụng bí danh với nohup

$ alias sayHello='/bin/echo "Hello world!"' 
$ sayHello 
    Hello world! 
$ nohup sayHello 
    nohup: appending output to `nohup.out' 
    nohup: cannot run command `sayHello': No such file or directory 

(lý do tôi đặt câu hỏi này là bởi vì tôi đã aliased perl tôi và python để nhị phân perl/python khác nhau đã được tối ưu hóa cho mục đích riêng của tôi, tuy nhiên, nohup mang lại cho tôi rắc rối nếu tôi không cung cấp đường dẫn đầy đủ tới các tệp nhị phân perl/python của tôi)

+0

thử 'eval nohup sayHello' (Tôi sẽ ngạc nhiên nếu nó hoạt động mặc dù). Chúc may mắn. – shellter

+1

Cách đặt lệnh nohup vào bí danh: 'bí danh sayHello = 'nohup/bin/echo" Xin chào thế giới "' ' – orb

Trả lời

7

Vì trình bao không truyền các bí danh cho các tiến trình con (trừ khi bạn sử dụng $() hoặc ``).

$ alias sayHello = '/ bin/echo "Hello world!"'

Bây giờ một bí danh được biết đến trong quá trình shell này, đó là tốt, nhưng chỉ hoạt động trong quá trình một vỏ này.

$ sayHello 

Hello world! 

Vì bạn đã nói "sayHello" trong cùng một trình bao đã hoạt động.

$ nohup sayHello 

Ở đây, chương trình "nohup" đang được bắt đầu như một quá trình con. Do đó, nó sẽ không nhận được bí danh. Sau đó, nó bắt đầu quá trình con "sayHello" - không tìm thấy.

Đối với vấn đề cụ thể của bạn, tốt nhất là làm cho "perl" và "python" mới trông giống như bình thường càng nhiều càng tốt. Tôi muốn đề xuất đặt đường dẫn tìm kiếm.

Trong bạn ~/.bash_profile thêm: export PATH = "/ my/bóng/phiên dịch/bin: $ {PATH}"

Sau đó login lần sau.

Vì đây là biến môi trường, nên sẽ được chuyển cho tất cả các quy trình con, có phải chúng có vỏ hay không - nó sẽ hoạt động rất thường xuyên.

+0

cảm ơn! Tôi đánh giá cao nó – asf107

+0

"Vì vậy, nó sẽ không nhận được bí danh." Tôi đã suy nghĩ, quá trình con, như '(echo" TheAlias ​​= $ (bí danh sayHello; sayHello) ") & wait' thất bại, có vẻ như bí danh không được áp dụng nhưng có mặt; Tôi tự hỏi liệu có cách nào để áp dụng bí danh tồn tại không? –

0

Nếu bạn nhìn vào phần Aliases của cuốn cẩm nang Bash, nó nói

Từ đầu tiên của mỗi câu lệnh đơn giản, nếu không thể viện chứng, được kiểm tra để xem nếu nó có một bí danh.

Thật không may, nó không có vẻ như bash có bất cứ điều gì như zsh 's global aliases, mà được mở rộng ở vị trí nào.

2

Đối với bash: Hãy thử làm nohup 'your_alias'. Nó làm việc cho tôi. Tôi không biết tại sao báo giá lại không được hiển thị. Đặt bí danh của bạn trong dấu ngoặc kép.

1

Với bash, bạn có thể gọi một subshell tương tác bằng cách sử dụng tùy chọn -i. Điều này sẽ nguồn của bạn .bashrc cũng như kích hoạt tùy chọn vỏ expand_aliases. Được cấp, điều này sẽ chỉ hoạt động nếu bí danh của bạn được xác định trong .bashrc là quy ước.

Bash manpage:

Nếu tùy chọn -i là hiện nay, vỏ là tương tác.

expand_aliases: Nếu được đặt, bí danh được mở rộng như được mô tả ở trên trong ALIASES. Tùy chọn này được bật là theo mặc định cho các trình tương tác.

Khi một trình bao tương tác không phải là trình khởi động đăng nhập được khởi động, hãy bash đọc và thực hiện lệnh từ /etc/bash.bashrc~/.bashrc, nếu các tệp này tồn tại.


$ nohup bash -ci 'sayHello'