저는 sed
기존 파일의 텍스트를 변경하고 Nano를 사용하여 새 파일을 만드는 데 사용합니다.
예를 들어 다음과 같이 텍스트를 변경합니다 sed
.
sudo sed -i 's/TESTING === "1"/TESTING === "0"/g' /etc/csf/csf.conf
Nano나 VI에 들어가서 텍스트를 붙여넣고 권한을 부여한 다음 실행하지 않고도 이것으로 파일을 생성할 수 있는 방법이 있나요?
일반적으로 저는 이 작업을 수행 cd ~ && nano script.sh && chmod +x script.sh && ./script.sh && rm -rf script.sh
한 다음 모든 스크립트 내용을 내부에 붙여넣고 저장하고 실행합니다.
그러나 이번에는 이것을 자동화하고 모든 것을 하나의 입력으로 붙여넣고 제자리에서 실행하고 싶었습니다.
즉, 붙여넣기에서 스크립트를 실행하거나 임시 파일에 붙여넣고 파일이 닫힐 때 "그 자리에서" 실행하여 최소한의 클릭 및 붙여넣기로 실행하는 방법을 찾고 있습니다. .
이 솔루션이 필요한 이유:
여러 서버 환경을 사용하는 경우 이 프로세스가 반복될 수 있으므로 이 작업을 반복해서 수행하여 시간을 절약하고 싶습니다.
이 행위의 합법성에 대한 논의는 그 자체로 논의입니다…
예는 다음과 같습니다. 프롬프트(앰퍼샌드를 포함한 첫 번째 항목)에 다음 명령을 붙여넣고 Nano를 입력하여 스크립트를 만든 다음 다음 스크립트 구문을 붙여넣고 저장하면 실행됩니다. 이 프로세스를 자동화하고 싶습니다.이들 모두, 하나의 붙여넣기/하나의 작업.
cd /home/testo && sudo nano script.sh && sudo chmod +x scripts.sh && sudo ./script.sh
#!/bin/bash -x
# Basic update and upgrade:
sudo apt-get update -y
sudo apt-get upgrade -y
# Setup CSF-LFD:
sudo rm -f csf.tgz
sudo wget https://download.configserver.com/csf.tgz
sudo tar -xzf csf.tgz
sudo sh install.sh
sudo perl /etc/csf/csftest.pl
sudo sed -i 's/TESTING === "1"/TESTING === "0"/g' /etc/csf/csf.conf
sudo csf -r
답변1
즉, 나는 길을 찾는다.붙여넣기에서 스크립트 실행, 또는 임시 파일에 붙여넣고 파일을 저장하지 않고 "제자리"에서 실행합니다. --- 최소한의 클릭과 붙여넣기로 모든 것을 실행합니다.
대화형 쉘이 Bash 또는 호환 쉘이라고 가정하면 다음을 찾고 있습니다.
bash << 'EOT'
<PASTE SCRIPT HERE>
EOT
위의 코드 사례는 "Heredoc"("Here document"의 줄임말)이라고 하며, 이를 사용하여 새 하위 쉘에서 EOT까지 모든 명령을 실행합니다.
이렇게 하면 작업 디렉터리를 변경하거나 환경을 변경할 수 있습니다. EOT는 키워드가 아니므로 EOT 대신 원하는 문구를 사용할 수 있습니다. 구분된 문서의 시작과 끝에서 철자가 동일한지 확인하세요.
'EOT'
상위 셸을 나타내기 위해 작은따옴표로 묶습니다.아니요이 문서에서 대체 작업을 수행합니다. 예를 들어, 이는 상위 쉘에 의한 변수 확장을 방지하지만 하위 쉘에 의한 변수 확장은 방지합니다.
구체적인 예를 들면 다음과 같습니다.
sylvain@bulbizarre:~$ bash << 'EOT'
echo hello
cd /
echo We are in ${PWD}
EOT
hello
We are in /
sylvain@bulbizarre:~$ # <-- I'm still in my home directory when
# back to the interactive shell
즉, 붙여넣기에서 스크립트를 실행하는 방법을 찾고 있거나,임시 파일에 붙여넣고 "제자리에서" 실행하세요.저장할 파일이 없습니다. 최소한의 클릭과 붙여넣기로 모든 것이 실행됩니다.
실행된 명령의 복사본을 유지하려면 다음 변형을 사용할 수 있습니다.
sylvain@bulbizarre:~$ tee /tmp/saved.sh << 'EOT' | bash
echo hello
cd /
echo We are in ${PWD}
EOT
hello
We are in /
sylvain@bulbizarre:~$ cat /tmp/saved.sh
echo hello
cd /
echo We are in ${PWD}
답변2
붙여넣으려는 스크립트 앞에 다음을 붙여서 이 작업을 수행할 수 있습니다.
echo '
그런 다음 줄 뒤에 접미사를 추가합니다.
'|sudo tee ses.sh >/dev/null && sudo chmod +x ses.sh && sudo ./ses.sh
그런 다음 명령줄에서 전체 내용을 한 번에 복사하여 붙여넣을 수 있습니다. 예를 들어:
echo '#!/bin/bash
echo "Do some stuff - line 1"
echo "Do some stuff - line 2"
sudo echo -e "Do some stuff - line 3\nand line 4"
[[ 1 == 1 ]] && echo "We are all done here, bye!"
'|sudo tee ses.sh >/dev/null && sudo chmod +x ses.sh && sudo ./ses.sh
안타깝게도 붙여넣은 스크립트에 작은따옴표가 포함되어 있으면 이 오류가 발생합니다.
실제로 파일을 저장하지 않는 또 다른 방법은 다음과 같습니다.
/bin/bash -c '[script here]'
즉, 접두사 /bin/bash -c '
및 접미사 단일'
이런 식으로 sudo 스크립트를 복사하여 붙여넣는 것이 실제로 권장되는지 여부는 또 다른 질문입니다...
답변3
즉, 붙여넣기에서 스크립트를 실행하는 방법을 찾고 있는데,또는 임시 파일에 붙여넣고 파일을 저장하지 않고 "제자리"에서 실행합니다.--- 최소한의 클릭과 붙여넣기로 모든 것을 실행합니다.
쉘의 "readline" 라이브러리를 사용하여 이를 수행할 수 있습니다.
LESS='+/^READLINE' man bash
및 도 참조하십시오 LESS='+/edit-and-execute-command' man bash
.
귀하의 경우에는 간단합니다.
파일 에 ~/.bashrc
다음 줄을 입력합니다.
EDITOR=nano
변경 사항을 적용하려면 로그아웃했다가 다시 로그인하세요. (또는 직접 입력 . ~/.bashrc
)
그런 다음 명령을 붙여 넣으려면 를 입력합니다 CtrlXCtrlE.
임시 나노 버퍼가 열립니다. 실행하려는 명령을 붙여넣거나 입력합니다.
저장하고 종료하면 입력하는 모든 내용이 Bash 명령 프롬프트에 입력한 것과 똑같이 실행됩니다.
명령을 입력하기 시작했는데 내용이 길어지고 편집자가 편집할 수 있도록 하려는 경우 CtrlXCtrlE언제든지 Nano를 사용하여 현재 명령줄을 입력하여 편집할 수 있습니다.
나노가 많은 힘을 가지고 있다는 것은 아닙니다. Vim을 배워보는 게 어떨까요? :)
다시,바라보다LESS='+/edit-and-execute-command' man bash
신뢰할 수 있는 세부정보를 얻으세요.
exit
다음 명령을 포함하면당신의껍데기종료됩니다. 다음과 같이 명령을 전달하지 않았습니다.스크립트. 당신은 당신의현재 쉘.exit
따라서 exit
명령 프롬프트에 입력하여 얻을 수 있는 것과 동일한 효과를 원하지 않는 한 해당 문을 포함하지 마십시오.
답변4
목표가 원격 시스템에 존재하지 않는 스크립트를 실행하는 것이라면 전체 스크립트를 원격 시스템의 터미널에 복사하여 붙여넣지 않고도 이를 달성할 수 있는 더 좋은 방법이 있습니다.
예를 들어, SSH를 통해 원격 시스템에서 로컬 스크립트를 실행할 수 있습니다.
cat script.sh | ssh me@myserver /bin/bash
편집: 시간을 내어 질문에 대한 추가 정보를 편집하여 더 이상 질문이 되지 않도록 해주셔서 감사합니다.XY 문제 건배!