bash: [: quá nhiều đối số?


8

Tôi đang cố gắng tạo một thư mục và cdvào đó:

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

Khi tôi tải lại bashrc ( . ~/.bashrc) tôi gặp lỗi:

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

Làm thế nào để tôi sửa lỗi này? Và [:trong lỗi có nghĩa là gì?

Thi thiên Ai đó có thể hướng tôi đến một hướng dẫn kịch bản bash "không mật mã" không?


Có một cái gì đó sai trong kịch bản của bạn tôi đoán, bạn có thể bắt đầu bằng cách sử dụng cú pháp thích hợp với if. if <COMMANDS>; then <COMMANDS>; fi
karthick87

2
Tôi không biết nếu đó chỉ là tôi ... nhưng hãy thử Cạm bẫy 6; Tôi nghe nói nó có một vài người;) mywiki.wooledge.org/BashPit thác
Alex Stevens

Câu trả lời:


12

Lỗi chính trong tập lệnh của bạn là [lệnh, tương đương với testlệnh, được sử dụng để kiểm tra các điều kiện, như so sánh chuỗi, sự tồn tại của các tệp, v.v.

Để kiểm tra trạng thái thoát của các quy trình bạn phải sử dụng ifmà không có [, vì vậy tập lệnh của bạn có thể

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

Điều này được giải thích trong Bash Cạm bẫy: 9. if [grep foo myfile .

Tôi đề nghị bạn đi qua GrayCat Bash Guide để hiểu bash.


Hướng dẫn đó thực sự rất tốt! Cảm ơn bạn, nếu không tôi vẫn sẽ giải mã được trang man :)
Zabba

Một cách khác là kiểm tra xem thư mục có tồn tại hay không nếu [-d "$ APPDIR"]; sau đó cd $ APPDIR fi
s1mmel

-3

Một nguyên mẫu có thể là:

  • Tạo một tệp trong máy tính để bàn của bạn: touch newDirectory.sh
  • Tạo tập tin thực thi: chmod +x newDirectory.sh
  • Để gọi tập lệnh từ thiết bị đầu cuối trong máy tính để bàn: ./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}

Lời khuyên nhỏ: nếu bạn là người mới, đừng gây rối với .bashrc:)


2
Xin lỗi, không. Có một số vấn đề với câu trả lời đó. 1) thiếu a {. 2) nó không bao giờ chạy mkdir. 3) bạn đã không kiểm tra cdtrạng thái thoát. 4) Không đặt phần mở rộng trên tập lệnh. Đặc biệt là không .shkhi nó thậm chí không phải là một kịch bản sh. 5) Đặt nó trong một kịch bản đánh bại mục đích của chức năng. mywiki.wooledge.org/BashGuide
geirha

@geirha: lỗi của tôi, {đã có trước khi chỉnh sửa của tôi.
enzotib

Trả lời: ((mkdir "$ {appdir}")) bằng 'mkdir "$ {appdir}" '(nhìn vào dấu tích phía sau)
studentz

gỡ lỗi tập lệnh bash -x newDirectory.sh và bạn sẽ thấy tập lệnh sẽ cd vào thư mục. Nếu bạn muốn chạy một quy trình khác sau đó, Đó là một con ngựa hoàn toàn khác.
studentz

Kịch bản chạy với bash dash tro. Bạn có thể thay đổi phần mở rộng bất cứ điều gì bạn muốn.
studentz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.