2015-04-16 38 views
6

Ai đó có thể giúp tôi chuyển đổi chức năng bash này thành cá không? Nó cũng sẽ được tốt đẹp nếu bạn có thể giải thích những gì những gì thích "${@%%.app}”, 's/ /.*/g’, "[email protected]\”, vvChuyển đổi chức năng bash thành cá

bid() { 
    local shortname location 

    # combine all args as regex 
    # (and remove ".app" from the end if it exists due to autocomplete) 
    shortname=$(echo "${@%%.app}"|sed 's/ /.*/g') 
    # if the file is a full match in apps folder, roll with it 
    if [ -d "/Applications/$shortname.app" ]; then 
     location="/Applications/$shortname.app" 
    else # otherwise, start searching 
     location=$(mdfind -onlyin /Applications -onlyin ~/Applications -onlyin /Developer/Applications 'kMDItemKind==Application'|awk -F '/' -v re="$shortname" 'tolower($NF) ~ re {print $0}'|head -n1) 
    fi 
    # No results? Die. 
    [[ -z $location || $location = "" ]] && echo "$1 not found, I quit" && return 
    # Otherwise, find the bundleid using spotlight metadata 
    bundleid=$(mdls -name kMDItemCFBundleIdentifier -r "$location") 
    # return the result or an error message 
    [[ -z $bundleid || $bundleid = "" ]] && echo "Error getting bundle ID for \"[email protected]\"" || echo "$location: $bundleid” 
} 

Cảm ơn rất nhiều trước.

+2

Làm sao bạn cố gắng giải quyết vấn đề này một mình? – mcserep

Trả lời

16

Một số lưu ý về sự khác biệt:

  • thiết lập các biến
    • bash: var=value
    • cá: set var value
  • đối số chức năng
  • chức năng biến địa phương
    • bash: local var
    • cá: set -l var
  • điều kiện tôi
    • bash: [[ ... ]][ ... ]
    • cá: test ...
  • điều kiện II
    • bash: if cond; then cmds; fi
    • cá: if cond; cmds; end
  • điều kiện III
    • bash: cmd1 && cmd2
    • cá: cmd1; and cmd2
  • thay thế lệnh
    • bash: output=$(pipeline)
    • cá: set output (pipeline)
  • quá trình thay
    • bash: join <(sort file1) <(sort file2)
    • cá: join (sort file1 | psub) (sort file2 | psub)

Documentation

+0

Tôi vẫn không thể tìm ra cá tương đương với '$ {@ %%. App}'. Tôi tin rằng tôi biết điều đó có nghĩa là trả lại tất cả chuỗi trong '$ @' có chứa .app ở cuối. Vì vậy, tôi sẽ nghĩ rằng nó sẽ là '$ argv [**. App]' trong cá nhưng nó cho _Có thể không expand_ lỗi. – user14492

+0

'$ {@ %%. App}' trả về danh sách tất cả thông số vị trí có bất kỳ tiện ích mở rộng ".app" nào đã bị xóa. Tương đương cá là 'cho arg trong $ argv; thiết lập args $ args (echo "$ arg" | sed 's/.app $ //'); end' –

+0

Tôi nghĩ bạn có thể đã đánh máy trong 'sed' s/.app $ // ''với $, trong chú thích ở trên. Nếu không, bạn có thể giải thích lý do tại sao nó ở đó. – user14492

Các vấn đề liên quan