Искажение 'Python' к 'ipython' только, когда 'Python' запущен без args

Вы пропускаете то, что вызов к gvim не блокируется, пока Вы не выходите из gvim, он сразу возвращается. Так xsel < /tmp/xselection обрабатывает файл перед редактированием его.

4
16.02.2013, 16:35
2 ответа

Псевдонимы Shell, по определению, не дают Вам способа использовать их условно. Они относятся к чему-либо, что Вы выполняете от интерактивной подсказки.

Путем можно сделать, это с функцией вместо этого. (См. В Bash, когда исказить, когда написать сценарий, и когда записать функцию? для больше на том, почему это отличается.)

function python () {
    test -z "$1" && ipython || command python "$@"
}

Что-то вдоль тех строк в емкостно-резистивном файле Вашей оболочки заставит Вашу оболочку выполнять эту функцию вместо двоичного файла непосредственно. Если первым аргументом будет пробел, то он исчерпает ipython для Вас, иначе он передаст все аргументы любому двоичному файлу Python, находится в Вашем пути (отметьте использование command вынудить двоичный файл, а не функцию выполнить и вызвать рекурсию на себе).

5
27.01.2020, 20:52
  • 1
    Это также выполнится на python '', и Вы также выполните Python если ipython возвращает код выхода> 0. function также делает этот неPOSIX, когда это не должно действительно быть. –  Chris Down 16.02.2013, 17:38
  • 2
    @ChrisDown, Все те "побочные эффекты" являются намеренными здесь. Если пустой аргумент указан, ipython должен смочь обработать его. Если ipython сбои по некоторым причинам (такой как не существующий в системе), пробуя обычный Python походили на хороший вариант. Используя function просто конвенция ZSH, но Ваше право она работала бы без этого. –  Caleb 16.02.2013, 17:46
  • 3
    Это не псевдоним, это - функция оболочки. По крайней мере, в ударе, псевдонимы просто заменяют название команды строкой фиксированных слов; никакие обработанные аргументы как таковые, никакая логика. нерезидентный –  vonbrand 16.02.2013, 18:54
  • 4
    @vonbrand я не сказал это, был псевдонимом. На самом деле я сказал, что псевдоним не будет работать на эту проблему и что функция оболочки была необходима вместо этого. –  Caleb 16.02.2013, 20:34

Не уверенный, если можно сделать это в псевдониме zsh, но почему бы не всунуть этот маленький сценарий оболочки Ваш ~/bin как python:

#!/bin/bash
if test -z "$1"; then
    exec /usr/bin/ipython
else
    exec /usr/bin/python "$@"
fi
1
27.01.2020, 20:52
  • 1
    Это также выполнится на python ''. –  Chris Down 16.02.2013, 17:37
  • 2
    Как будто Вы на самом деле сделали бы тот :) –  Dennis Kaarsemaker 16.02.2013, 17:41

Теги

Похожие вопросы