यदि यह पथ पर मौजूद है, तो बैश स्क्रिप्ट का उपयोग करें, अन्यथा एक निष्पादन योग्य का उपयोग करें


2

यदि मैं पथ पर मौजूद है तो मैं एक bash स्क्रिप्ट का उपयोग करना चाहता हूं, और अन्यथा, मैं एक निष्पादन योग्य का उपयोग करना चाहूंगा।

alias build='xctool.sh'
type -a xctool.sh || alias build='xcodebuild'
build -scheme "${APP_SCHEME}" archive

तो इस उदाहरण में मैं xcodebuild के बजाय xctool.sh का उपयोग करना चाहता हूं यदि यह उपलब्ध है। अन्यथा मैं चाहता हूं कि xcodebuild का उपयोग किया जाए।

मुझे मिलने वाली त्रुटि "बिल्ड: कमांड नहीं मिली"

मुझसे कहां गलती हो रही है?

जवाबों:


2

यदि आप वर्णन करते हैं कि कमांड लाइन पर चलने पर आप पूरी तरह से काम करते हैं, यदि आपको समस्याएँ हैं, तो मुझे लगता है कि आप इसे एक स्क्रिप्ट के भाग के रूप में करने की कोशिश कर रहे हैं (संकेत: यह उसी तरह की चीज है जिसे आप अपने प्रश्न में उल्लेख करना चाहते हैं)।

लिपियों को एक गैर-संवादात्मक खोल में चलाया जाता है और इस तरह के खोल में विस्तार नहीं किया जाता है। से man bash:

   Aliases are not expanded when the shell is not interactive, unless  the
   expand_aliases  shell option is set using `shopt`

तो, आपके पास कुछ विकल्प हैं। सबसे पहले, आप अपनी स्क्रिप्ट में उपनाम सक्रिय कर सकते हैं:

#!/usr/bin/env bash

shopt -s expand_aliases
alias build='xctool.sh'
type -a xctool.sh 2>/dev/null || alias build='xcodebuild'
build -scheme "${APP_SCHEME}" archive

वैकल्पिक रूप से, आप उपयोग करके उपनामों से पूरी तरह बच सकते हैं eval:

#!/usr/bin/env bash

build='xctool.sh'
type -a xctool.sh 2>/dev/null || build='xcodebuild'
$build -scheme ${APP_SCHEME} archive

धन्यवाद! मैं आपके आखिरी सुझाव की कोशिश करूंगा, पहली बात सोमवार की सुबह। एक विजेता की तरह लगता है।
195 बजे P5ycH0

क्या अंतिम पंक्ति बिना समान रूप से अच्छी तरह से काम नहीं करेगी eval? (और विस्तार की समस्याओं के लिए कम संभावना है):$build -scheme "${APP_SCHEME}" archive
एड्रियन प्रैंक

@ AdrianPronk अच्छी बात है, जवाब संपादित, धन्यवाद।
टेराडॉन

1

मुझे नहीं पता, typeयहाँ क्या करना चाहिए; लेकिन जब मैं तुम्हें सही कर दूं, तो कुछ इस तरह मददगार हो सकता है:

[ -x ./xctool.sh ] && alias build='./xctool.sh' || alias build='xcodebuild'

1

man test-E / -f झंडे पर एक नजर है ।

शायद कुछ इस तरह से काम करता है:

[ -f xctool.sh ] && xctool.sh || xcodebuild
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.