bash : [: 너무 많은 인수?


8

디렉토리를 작성하려고 cd합니다.

~ / .bashrc에서 :

function abc() {
  appname=$1
  appdir="$HOME/code/$appname"
  if [ mkdir $appdir -a cd $appdir ]; then
    echo Success
  else
    echo Failed to create and switch directory
  fi
}

bashrc ( . ~/.bashrc)를 다시로드 하면 오류가 발생합니다.

bash: [: too many arguments
Failed to create and switch directory

이 문제를 어떻게 해결합니까? 그리고 [:오류에서 무엇을 의미합니까?

추신. 누군가 나를 "비 암호적인"bash 스크립팅 튜토리얼로 안내 할 수 있습니까?


스크립트에 문제가있는 것 같습니다 .if와 적절한 구문을 사용하여 시작할 수 있습니다. if <COMMANDS>; then <COMMANDS>; fi
karthick87

2
그것이 단지 나인지는 모르겠지만 ... Pitfall 6을 시도해보십시오. 나는 그것이 몇 사람을 얻는다고
Alex Stevens

답변:


12

스크립트의 주요 오류는 [명령과 동등한 test명령이 문자열 비교, 파일 존재 등과 같은 조건을 테스트하는 데 사용된다는 것입니다.

ifwithout없이 사용해야하는 프로세스의 종료 상태를 테스트하려면 [스크립트가

if mkdir "$appdir" && cd "$appdir"; then
  echo "Success"
else
  echo "Failed to create and switch directory"
fi

이것은 Bash Pitfalls에 설명되어 있습니다 : 9. if [grep foo myfile .

난 당신이 통과 제안 GrayCat 배쉬 가이드 bash는 이해하기.


그 가이드는 정말 좋습니다! 고맙습니다. 그렇지 않으면, 나는 여전히 매뉴얼 페이지를 해독 할 것입니다 :)
Zabba

다른 방법은 [-d "$ APPDIR"] 인 경우 디렉토리가 존재하는지 확인하는 것입니다. cd $ APPDIR fi
s1mmel

-3

프로토 타입은 다음과 같습니다.

  • 데스크탑에서 파일을 작성하십시오. touch newDirectory.sh
  • 파일을 실행 가능하게 만듭니다. chmod +x newDirectory.sh
  • 데스크탑의 터미널에서 스크립트를 호출하려면 ./newDirectory.sh anyName

/

#!/bin/bash
function abc() {
  appname=${1}
  appdir="$HOME/Desktop/$appname"
  if (( mkdir "${appdir}" )) ; then     
    cd "${appdir}"  
    echo "Success" 
  else   
    echo "Failed to create and switch directory" 
  fi
}
abc ${1}

작은 추천 : 당신이 새로운 경우 .bashrc:) 와 엉망하지 마십시오


2
죄송합니다 그 대답에는 몇 가지 문제가 있습니다. 1) 누락 {. 2) 절대로 실행되지 않습니다 mkdir. 3) cd의 종료 상태를 테스트하지 않았습니다 . 4) 스크립트에 확장자를 두지 마십시오. 특히 .shsh 스크립트가 아닌 경우에는 그렇지 않습니다. 5) 스크립트에 넣으면 기능의 목적이 무효가됩니다. mywiki.wooledge.org/BashGuide
geirha

@geirha : 내 잘못, {편집하기 전에 있었다.
enzotib

답 : ((mkdir "$ {appdir}"))은 'mkdir "$ {appdir}"와 같습니다 '(뒤 진드기 확인)
studentz

스크립트 bash -x newDirectory.sh를 디버그하면 스크립트가 디렉토리로 cd됨을 알 수 있습니다. 그 후 다른 프로세스를 실행하려면 완전히 다른 말입니다.
studentz

스크립트는 bash dash ash로 실행됩니다. 원하는대로 확장자를 변경할 수 있습니다.
studentz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.