bash: [: terlalu banyak argumen?


8

Saya mencoba membuat direktori dan cdmasuk ke dalamnya:

Di ~ / .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
}

Ketika saya memuat ulang bashrc ( . ~/.bashrc) saya mendapatkan kesalahan:

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

Bagaimana cara saya memperbaikinya? Dan apa artinya [:kesalahan itu?

Ps. Bisakah seseorang mengarahkan saya ke tutorial scripting "non-cryptic" bash?


Ada sesuatu yang salah dalam skrip Anda, saya kira, Anda bisa mulai dengan menggunakan sintaks yang tepat dengan if. if <COMMANDS>; then <COMMANDS>; fi
— karthick87

2
Saya tidak tahu apakah ini hanya saya ... tetapi coba Pitfall 6; Saya dengar ada beberapa orang;) mywiki.wooledge.org/BashPitfalls
— Alex Stevens

Jawaban:


12

Kesalahan utama dalam skrip Anda adalah bahwa [perintah, setara dengan testperintah, digunakan untuk menguji kondisi, seperti perbandingan string, keberadaan file, dan sebagainya.

Untuk menguji status keluar dari proses yang harus Anda gunakan iftanpa [, jadi skrip Anda bisa

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

Ini dijelaskan dalam Bash Pitfalls: 9. if [grep foo myfile .

Saya sarankan Anda membaca GrayCat Bash Guide untuk memahami bash.


Panduan itu sangat bagus! Terima kasih, kalau tidak saya masih akan mengartikan halaman manual :)
— Zabba

Cara lain adalah memeriksa apakah dir ada jika [-d ​​"$ APPDIR"]; lalu cd $ APPDIR fi
— s1mmel

-3

Sebuah prototipe dapat berupa:

  • Buat file di desktop Anda: touch newDirectory.sh
  • Jadikan file dapat dieksekusi: chmod +x newDirectory.sh
  • Untuk memanggil skrip dari terminal di desktop: ./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}

Rekomendasi kecil: jika Anda baru, jangan main-main dengan .bashrc:)


2
Maaf tidak. Ada beberapa masalah dengan jawaban itu. 1) hilang a {. 2) tidak pernah berjalan mkdir. 3) Anda tidak menguji cdstatus keluar. 4) Jangan menaruh ekstensi pada skrip. Apalagi .shsaat itu bahkan bukan skrip-sh. 5) Menempatkannya dalam skrip mengalahkan tujuan fungsi. mywiki.wooledge.org/BashGuide
— geirha

@geirha: salahku, {sudah ada sebelum pengeditan.
— enzotib

Jawaban: ((mkdir "$ {appdir}")) sama dengan 'mkdir "$ {appdir}" '(lihat kutu belakang)
— studentz

debug skrip bash -x newDirectory.sh dan Anda akan melihat bahwa skrip akan melakukan cd ke direktori. Jika Anda ingin menjalankan proses lain setelah itu, itu adalah kuda yang sama sekali berbeda.
— studentz

Script dijalankan dengan abu dasbor bash. Anda dapat mengubah ekstensi apa pun yang Anda inginkan.
— studentz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.