2013-08-14 1 views
2

В bash, я хотел бы распространять код выхода конкретной команды, выполняемой в псевдониме, так что сам вызов alias вернет ее (выйдите с ней).bash: код выхода команды выхода, выполненный в псевдониме

Представьте себе следующий пример (Обратите внимание: команда не имеет никакого смысла, просто демонстрирует проблему я сталкиваюсь):

alias cda='cd \/a; exit_code=$?; echo "STATUS: $exit_code"; alias cdb='cd \/b' 
cda && cdb 

для меня нет таких каталогов, как: /a и /b, чтобы убедиться, что команды терпят неудачу. Я хотел бы выполнить cdb псевдоним только в том случае, если выполнено одно из следующих действий: cda. Однако, как echo была последняя команда, и она закончилась exit статус 0 => оба выполнены

То, что я попытался это:

alias cda='cd \/a; exit_code=$?; echo "STATUS: $exit_code"; exit $exit_code'; alias cdb='cd \/b' 
cda && cdb 

однако это выходит из оболочки полностью => не представляется возможным для меня ,

Любая идея распространения статуса выхода (в моем случае $exit_code) в качестве статуса выхода псевдонима?

ответ

7

Это лучше, что вы просто использовать функции над псевдонимами:

cda() { 
    cd /a 
    exit_code=$? 
    echo "STATUS: $exit_code" 
    return "$exit_code" # optional 
} 

cdb() { 
    cd /b 
    exit_code=$? 
    echo "STATUS: $exit_code" 
    return "$exit_code" # optional 
} 

Что касается псевдонима вы можете попробовать добавить тест в конце:

alias cda='cd \/a; exit_code=$?; echo "STATUS: $exit_code"; [[ exit_code -eq 0 ]]'; alias cdb='cd \/b' 
+0

спасибо за ответ, что сделал это для меня. остается только вопрос, если он достигнут исключительно через псевдоним или нет. –

+0

@PeterButkovic Добавлено обновление для него. Пожалуйста, проверьте. – konsolebox

+0

большое спасибо! оба решения работают! –

1

У меня есть эта функция в моем .bashrc :

return_exitcode(){ 
    return $1 
} 

для имитации любого требуемого кода выхода (проверка ввода не производится).

С этим, псевдоним будет:

alias cda='cd /a; exit_code=$?; echo "STATUS: $exit_code"; return_exitcode $exit_code' 
alias cdb='cd /b; exit_code=$?; echo "STATUS: $exit_code"; return_exitcode $exit_code' 

примечаниями:

  1. Использование функций всегда предпочтительнее над псевдонимами. Следовательно, ответ konsolebox - правильный ответ.
  2. Этот ответ был добавлен только потому, что эта небольшая функция иногда удобно, в то время как писать команды друг за другом с ; ...
+0

спасибо, что поделились идеей –