Thực hiện các cuộc gọi hệ thống để bash từ các tập lệnh gnuplot trong các bản phân phối dựa trên Ubuntu


2

Câu hỏi của tôi là: Làm thế nào tôi có thể thay đổi vỏ mặc định của gnuplot? Tôi muốn thay đổi nó để gửi thiết bị xuất chuẩn đến bash.

Điều này sẽ khá dễ dàng, nhưng tôi đang từ bỏ. Đây là lý do tại sao.

Tôi đang chạy ver gnuplot. 4.6 patchlevel 3 trên LubFi 13.10.

Shell tương tác mặc định của tôi là bash (shell Bourne-again) và shell đăng nhập của LubFi dường như là dấu gạch ngang (shell Debian Almquist). Không vấn đề gì với điều đó.

Nhưng gnuplot cũng đang sử dụng dấu gạch ngang thay vì bash. Đây là những gì tôi nhận được khi tôi hỏi gnuplot:

gnuplot> system "echo $0"
sh

Và sau đó, khi tôi hỏi cái vỏ của mình:

$ which sh
/bin/sh
$ ls -goh /bin/sh
lrwxrwxrwx 1 root root 4 Dec 23 09:30 /bin/sh -> dash

Bối cảnh của vấn đề: Tôi đang tạo ra một số sơ đồ epslatex và tôi cần thay đổi đường dẫn bao gồm của mỗi cái.

Đây không phải là một vấn đề, không có gì mà sed và một vòng lặp không thể giải quyết, nhưng việc gọi sed hoặc bash script bằng lệnh gọi hệ thống của gnuplot không phù hợp với tôi. Ba dòng cuối cùng của tệp cuối cùng luôn bị thiếu. Tuy nhiên, chạy tương tự từ bash tinh khiết làm một công việc khá sạch sẽ.

Tôi cũng đã thử opossite, gọi gnuplot từ tập lệnh bash, bao gồm các lệnh in trên tập lệnh gnuplot và cố gắng bắt đầu ra std của gnuplot thành một biến bash, nhưng nó cũng không hoạt động. Ví dụ, thử dòng sau từ bash, trả về các thông báo cho đầu ra tiêu chuẩn, nhưng không lưu trữ nội dung vào biến.

var=$(gnuplot plot.gnu)

Tôi không biết đây là vấn đề của LubFi hay gnuplot. Tôi đã giải quyết vấn đề về các tập tin tex của mình bằng một cách giải quyết, nhưng điều vỏ của gnuplot vẫn đang làm phiền tôi.

Vì vậy, tôi đang hỏi nó một cách chung chung: ¿Làm cách nào tôi có thể thay đổi vỏ mặc định của gnuplot? Có thể không? Có lẽ nó có thể hữu ích cho người khác. ;)

Đã chỉnh sửa vào ngày 2016-08-03

Câu hỏi ban đầu là về cách chạy các lệnh bash và script từ gnuplot bằng lệnh gọi hệ thống (sử dụng systemlệnh). Tuy nhiên, giải pháp tôi đề xuất cho câu hỏi này là thay đổi hệ thống ban đầu của phân phối, dấu gạch ngang, sang trình bao tôi biết, bash.

Thay đổi vỏ hệ thống thành bash có thể ảnh hưởng đến hiệu suất chung của hệ thống.


Thực sự, đây là hai câu hỏi: Mục tiêu thực tế mà bạn có và cách thay đổi vỏ được sinh ra gnuplot. Đoán xem cái nào được phủ sô cô la . Tôi đề nghị bạn mở rộng theo mục tiêu thực tế của bạn , với nhiều chi tiết hơn. Sau đó, ai đó có thể nói với bạn rằng có TeX StackExchange . (-:
JdeBP

1
Cám ơn vì sự gợi ý. Tôi mới ở đây và tôi mới tham gia StackExchange, nhưng tôi nghĩ câu hỏi của tôi rất phù hợp ở đây. Câu hỏi chính của tôi là về cách thay đổi vỏ của gnuplot. Tôi có thể giải quyết vấn đề khác của mình. :)
aaguirre

Câu trả lời:


1

Giải pháp tốt nhất tôi tìm thấy là cấu hình bash làm vỏ mặc định cho toàn hệ thống (Ubuntu).

sudo dpkg-reconfigure dash

Dòng này mở một trợ lý ncurses, yêu cầu về việc để dash là vỏ hệ thống mặc định.

Nếu một câu trả lời là không , thì bash được đặt làm hệ thống mặc định.

Sau đó, các kịch bản gnuplot của tôi hoạt động hoàn hảo.

Đã chỉnh sửa vào ngày 2016-08-03

Hãy xem xét rằng giải pháp này đang thay đổi lớp vỏ mặc định của bản phân phối Linux của bạn và nó có thể ảnh hưởng đến hiệu suất chung của hệ thống.


Không làm việc cho tôi. Sau khi chạy lệnh này, ls -l /bin/shhiển thị /bin/sh -> bashnhưng system "echo $0"vẫn xuất ra sh.
arekolek

@arekolek bạn có chắc là nó không hoạt động? Bạn có thể xác minh đó sh/bin/shvà bash đang /bin/bashsử dụng lệnh which. Lệnh list cho bạn biết đó shlà một liên kết tượng trưng bash, vì vậy mỗi lần shđược gọi, sau đó bashsẽ được sử dụng. Trừ khi bạn muốn dashđược gọi thay vì bash, điều này ngược lại với giải pháp này. Mặt khác, hệ thống "echo $ 0" luôn in shbất kể việc trỏ đến dashhay bash.
aaguirre

Tôi nghĩ rằng bạn đúng, tôi đã bị lừa bởi shthay vì bash. Tôi đoán chạy !ls -go $(which $0)là một thử nghiệm tốt hơn !echo $0. Tôi hy vọng rằng tôi có thể sử dụng các chức năng từ ~/.zshrcbên trong của mình gnuplot, nhưng dường như nó không có nguồn gốc tại thời điểm đó.
arekolek
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.