0

tmux の構成を定義し、この構成で tmux を起動する Python スクリプトがあります。構成は Python でヒアドキュメントとして保存されており、tmux の Bash 起動コマンドを実行するときに、これを Bash プロセスの置換で使用したいと考えています。

だから、私はこのようなことをしようとしています:

configuration = \
"""
set -g set-remain-on-exit on
new -s "FULL"
set-option -g prefix C-a
unbind C-b
bind - split-window -v
bind | split-window -h
## colours
set-option -g window-status-current-bg yellow
set-option -g pane-active-border-fg yellow
set -g status-fg black
set -g status-bg '#FEFE0A'
set -g message-fg black
set -g message-bg '#FEFE0A'
set -g message-command-fg black
set -g message-command-bg '#FEFE0A'
set-option -g mode-keys vi
set -g history-limit 5000
## mouse mode
set -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-select-window on
set -g mouse-resize-pane on # resize panes with mouse (drag borders)
## status
set-option -g status-interval 1
set-option -g status-left-length 20
set-option -g status-left ''
set-option -g status-right '%Y-%m-%dT%H%M%S '
## run programs in panes
# split left-right
split-window -h
# split left up
select-pane -t 0
split-window -v
select-pane -t 0
split-window -v
select-pane -t 0
split-window -v
select-pane -t 3
split-window -v
select-pane -t 0
send-keys 'ranger' Enter
select-pane -t 1
send-keys 'clear' Enter
select-pane -t 2
#send-keys 'htop' Enter
select-pane -t 3
send-keys 'elinks http://arxiv.org/list/hep-ph/new' Enter
select-pane -t 4
send-keys 'cmus' Enter
select-pane -t 5
send-keys 'ranger' Enter
select-pane -t 4
set -g set-remain-on-exit off
"""

command = executable + " -f <(echo " + configuration + ") attach"
os.system(command)

これを機能させるには何を変更する必要がありますか?

4

1 に答える 1

2

Python のos.system()system()、指定されたコマンドを/bin/sh -c <the command>. /bin/sh が bash のエイリアスであっても、bash をとして sh起動すると、POSIX モードで動作し、POSIX はプロセス置換 (the <(<command>)) を提供しません。

おそらく、構成を一時ファイルに書き込み、コマンドでそのファイルの名前を指定するのが最善の策のようです。コマンドを使用できる場合mktempは、一時ファイルを作成するための適切な候補です。たぶん、これらの行に沿った何かがそれを行うでしょう:

command = "config=`mktemp` && { echo \"" + configuration + "\" > $config; "
        + executable + " -f $config attach; unlink $config; }"

さらに、利用できたとしても、bash プロセスの置換はリダイレクトです。プロセスが起動されている場合は標準入力 (または標準出力) に影響し、ファイル名の代わりにはなりません。

于 2015-06-18T15:03:24.053 に答える