내장 함수의 동작을 복제하려고 합니다 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...