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
하고 그 안에 모든 스크립트 내용을 붙여넣은 다음 저장하고 실행합니다.
그러나 이번에는 그것까지 자동화하고 모든 것을 하나의 입력으로 붙여넣고 제자리에서 실행하고 싶습니다.
즉, 붙여넣기에서 스크립트를 실행하는 방법을 찾거나 임시 파일에 붙여넣고 파일을 닫는 순간 "현재 위치"에서 실행하여 최소한의 숫자로 실행하는 방법을 찾습니다. 클릭과 붙여넣기의 수입니다.
이 솔루션이 필요한 이유:
여러 서버 환경에서 작업할 때 프로세스가 반복될 수 있으며 이 작업을 반복해서 수행하여 시간을 절약하고 싶습니다.
그러한 행동의 정당성에 대한 논의는 그 자체로 명백한 논의입니다.
예는 다음과 같습니다. 프롬프트(앰퍼샌드가 포함된 첫 번째 항목)에 다음 coomand를 붙여넣고 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 명령 프롬프트에 입력한 것과 똑같이 실행됩니다.
명령을 입력하기 시작했는데 내용이 길어지고 편집기를 사용하여 명령을 편집하려는 경우 CtrlXCtrlENano를 사용하여 언제든지 입력하여 현재 명령줄을 편집할 수 있습니다.
나노가 많은 힘을 가지고 있는 것은 아닙니다. Vim을 배워보는 것이 어떨까요? :)
다시,보다LESS='+/edit-and-execute-command' man bash
신뢰할 수 있는 세부정보를 확인하세요.
exit
명령 을 포함하는 경우당신의껍데기종료됩니다. 명령을 다음과 같이 실행하고 있지 않습니다.스크립트. 당신은 그것들을 당신의 컴퓨터에서 실행하고 있습니다.현재 쉘.따라서 명령 프롬프트에 exit
입력하여 얻을 수 있는 것과 동일한 효과를 원하지 않는 한 문을 포함하지 마십시오 .exit
답변4
목표가 원격 시스템에 존재하지 않는 스크립트를 실행하는 것이라면 전체 스크립트를 원격 시스템의 터미널에 복사하여 붙여넣지 않고도 이를 달성할 수 있는 더 좋은 방법이 있습니다.
예: SSH를 통해 원격 시스템에서 로컬 스크립트를 실행할 수 있습니다.
cat script.sh | ssh me@myserver /bin/bash
수정: 시간을 내어 질문에 대한 추가 정보를 수정해 주셔서 감사합니다.xy문제 건배!