파일 내용에서 터미널 입력 줄을 채우는 방법은 무엇입니까?

파일 내용에서 터미널 입력 줄을 채우는 방법은 무엇입니까?

내장 함수의 동작을 복제하려고 합니다 history. 특히 이 작업을 수행하면 !<line # of command>의 명령으로 대체됩니다 line #.

다음 내용이 포함된 파일이 있다고 가정해 보겠습니다.

cd ~/some/path

해당 파일의 내용을 가져와서 다음과 같이 현재 터미널 입력 줄에 푸시할 수 있기를 원합니다.

$ ./put_to_input file
$ cd ~/some/path # pulled from the file, not manually typed 

이것이 가능한지 확실하지 않습니다. 도움을 주시면 대단히 감사하겠습니다!

밝히다:

마치 사람이 직접 입력한 것처럼 파일의 행을 터미널 입력에 넣고 싶습니다. !n쉘 히스토리 교체를 사용하는 것과 유사합니다.https://opensource.com/article/18/6/history-command

답변1

조사 .:

$ cat input
cd /etc
pwd

$ . input
/etc

답변2

@DopeGhoti의 솔루션을 사용할 수 있지만 ~/history 파일에 추가하여 호출하고 편집할 수 있습니다.

cat input >> ~/history
^r <cmd>
^e

답변3

에서는 이 작업을 zsh수행할 수 있습니다 print -z "content".

필요한 작업을 수행하는 쉘 함수를 만들 수 있었습니다.

여기 예:

put_to_input() {
    # Push command to current terminal input line with print -z
    print -z $(cat $HOME/runfile)
}
$ cat $HOME/runfile
echo hehe
$ put_to_input
$ echo hehe # file contents appear on input line

원본 출처: Bash가 자체 입력 스트림에 쓸 수 있나요?

답변4

Bash에서는 모든 파일의 내용을 기록에 추가할 수 있습니다.

history -r file

그런 다음 위쪽 화살표(Ctrl-p와 동일)를 눌러 명령을 편집 및 실행하거나 를 사용하여 직접 실행할 수 있습니다 !.

예:

$ echo '~bin/start.sh my=complicated -command=that must be "edited" all the time' > file
$ history -r file
$ history
    1  echo '~/bin/start.sh my=complicated -command=that must be "edited" all the time' > file
    2  history -r file
    3  ~/bin/start.sh my=complicated -command=that must be "edited" all the time
    4  history
$ !3
Running...

관련 정보