생선 껍질의 기록에 명령을 작성하는 방법은 무엇입니까?

생선 껍질의 기록에 명령을 작성하는 방법은 무엇입니까?

zsh셸 에서는 다음과 같이 명령줄 기록에 무언가를 쓸 수 있습니다.

#!/bin/zsh
cmd="cd /special/dir" 
print -s $cmd"        # save command in history for reuse

fish쉘에서 이 작업을 어떻게 수행할 수 있습니까 ?

답변1

AFAICT, read내장 및 쉘 명령줄 판독기만 기록에 항목을 추가할 수 있지만 stdin이 tty 장치인 경우에만 가능하므로 쉽게 스크립트할 수 없습니다.

그러나 다음을 사용하여 항목을 수동으로 추가할 수 있습니다.

function add_history_entry
  begin
    flock 1
    and echo -- '- cmd:' (
      string replace -- \n \\n (string join ' ' $argv) | string replace \\ \\\\
    )
    and date +'  when: %s'
  end >> $__fish_user_data_dir/fish_history
  and history merge
end

그런 다음:

add_history_entry 'cd /special/dir'

이것은 Fish 3.1.2부터 작동하지만 fish약간 움직이는 대상이며 API는 종종 한 버전과 다음 버전 사이에서 호환되지 않는 방식으로 변경된다는 점에 유의하십시오. 이 콘텐츠 __fish_user_data_dir및 내역 파일의 형식은 문서화되어 있지 않으므로 향후 릴리스에서 사라지거나 변경될 수 있습니다. 위의 내용은 $fish_history변수가 이외의 값으로 설정되지 않았다고 가정합니다 fish.

관련 정보