9

実行しようとしているコマンドを変更する方法はありますか? 出力をファイルにリダイレクトし、端末に出力したいと思います。それがうまくいくことがわかったので、実行しようとしているコマンドにそれls > file.txt | catを追加したいと思います。 ファイルにリダイレクトして端末に出力するより良い方法はありますか? ロガーを作ろうとしています。> file.txt | cat

4

2 に答える 2

9

行を実行したときに実行されるアクションを変更して、実行されるコマンドを変更できます。これは、Enter キーにバインドする関数を定義することで実行できます。

まず、'> file.txt | を追加できる関数を定義しましょう。cat' は、任意のコマンドの末尾に:

function log_and_accept {
    BUFFER="$BUFFER > file.txt | cat"
    zle accept-line
}

次の部分では、デフォルトのエンター キーの動作を実際に新しい関数に置き換えます。置き換えるデフォルトの動作は accept-line 関数です。zle のドキュメントを見ると、accept-line が ^J と ^M にバインドされていることがわかります。

この関数をこれらの文字にバインドするには、最初にウィジェットに変換する必要があります。

zle -N log_and_accept_widget log_and_accept

次に、古い動作を置き換えてバインドできます。

bindkey '^J' log_and_accept_widget
bindkey '^M' log_and_accept_widget

これで、実行するすべてのコマンドに対してそのコマンドが展開されます。すべての cd、ls、vim など。そのため、これを実際にオンまたはオフにする関数をさらにいくつか定義することをお勧めします。

function turn_on_logging {
    bindkey '^J' log_and_accept_widget
    bindkey '^M' log_and_accept_widget
}
function turn_off_logging {
    bindkey '^J' accept-line
    bindkey '^M' accept-line
}

zle -N turn_on_logging_widget turn_on_logging
zle -N turn_off_logging_widget turn_off_logging

bindkey '^P' turn_on_logging_widget
bindkey '^O' turn_off_logging_widget

これには気をつけたほうがいいと思います。少しテストした後、すぐに嫌いになりました。

于 2013-01-31T20:22:52.270 に答える
1

それにはいくつかの方法がありますが、私が最も気に入っているのは、ここで見つけたこのブロックですhttp://git.grml.org/?p=grml-etc-core.git;a=blob_plain;f=etc/zsh /zshrc;hb=HEAD

abk=(
  '...'  '../..'
  '....' '../../..'
  'BG'   '& exit'
  'C'    '| wc -l'
  'G'    '|& grep '${grep_options:+"${grep_options[*]}"}
  'H'    '| head'
  'Hl'   ' --help |& less -r'    #d (Display help in pager)
  'L'    '| less'
  'LL'   '|& less -r'
  'M'    '| most'
  'N'    '&>/dev/null'           #d (No Output)
  'R'    '| tr A-z N-za-m'       #d (ROT13)
  'SL'   '| sort | less'
  'S'    '| sort -u'
  'T'    '| tail'
  'V'    '|& vim -'
  'co'   './configure && make && sudo make install'
  'fc'   '> file.txt | cat'
)

zleiab() {
  emulate -L zsh
  setopt extendedglob
  local MATCH

  if (( NOABBREVIATION > 0 )) ; then
      LBUFFER="${LBUFFER},."
      return 0
  fi

  matched_chars='[.-|_a-zA-Z0-9]#'
  LBUFFER=${LBUFFER%%(#m)[.-|_a-zA-Z0-9]#}
  LBUFFER+=${abk[$MATCH]:-$MATCH}
}

zle -N zleiab && bindkey ",." zleiab

'fc' '> file.txt | cat'リストに追加したことにも注意してくださいabk

fcコマンドの後に入力してから(,.コンマとピリオド)をすばやく連続して押すと、zshが置き換えfcられます> file.txt | cat

于 2013-01-16T02:59:10.117 に答える