2013-07-26 4 views
1
[[email protected] ~]# printf "#!/bin/sh\nsomething" 
-bash: !/bin/sh\nsomething": event not found 

명령 기록에 저장되지 않기 때문에 명령을 명령으로 실행하는 데 실패합니다.쉘 스크립트 나 쉘 스크립트로 쉘 스크립트를 작성 하시겠습니까?

내가 해치울 수 있도록하기 위해 해시 뱅을 약간 난독 화해야합니까? !가 교체 기록에 사용되는,

[[email protected] ~]# printf "%s!/bin/sh\nsomething" # 
-bash: !/bin/sh\nsomething": event not found 

대화식 껍질

답변

3

(동일한 효과 echo 시도)

는 I이 시도. 당신은 \ 또는 작은 따옴표로 문자열을 넣어 그것을 탈출 할 수
printf '#!/bin/sh\nsomething' 

bash는 History Expansion의 설명서를 참조하십시오.

스크립트에서 기록이 기본적으로 사용 설정되어 있지 않으므로 실제 응용 프로그램이 스크립트에있는 경우 문제가되지 않습니다. 잘

export histchars= 
+0

오 쓰레기. 이 문제를 일으키는 역사 대체는 정말로 있습니까? 자, 개행 문자는 작은 따옴표로 표시되는 것처럼 보이므로 좋게 보입니다. –

0

: 당신이 이제까지의 역사 확장을 사용하지 않는 경우

, 당신과 함께 역사 문자를 사용하지 않도록 설정할 수 있습니다. 이것은 내가 발견 한 해결 방법입니다 :

[[email protected] ~]# printf "#%s/bin/sh\nsomething" ! 
#!/bin/sh 
something 

네을 (AN event을 언급 오류가 큰 단서입니다) 그것으로

주를 어지럽히 역사 확장되어야한다 : 나는를 사용하기로 선택 heredoc 내 스크립트 제작 스크립트. 이스케이프 문자열은 지옥 같습니다.

관련 문제