псевдоним для запуска косой черты (./) в файле без cd с использованием bash

Заработало. Закончилось этим

#!/bin/bash
tput civis
while true; do

num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')

case $num in
  1)
    clear
    cat./s0.file
    sleep 3
    ;;
....
  *)
    clear
    cat./s9.file
    sleep 3
    ;;
esac 


# In the following line -t for timeout, -N for just 1 character
  read -t 0.25 -N 1 input
  if [[ $input = " " ]] || [[ $input = " " ]]; then
# The following line is for the prompt to appear on a new line.
    echo
    break 
  fi
done
tput cnorm
0
16.04.2020, 23:52
3 ответа

Просто добавьте путь в переменной $PATH в.bashrc, как показано ниже:

export PATH=$PATH:/home/user/Project/sub1/sub2/sub3

И выполнять его из любого места даже без./

$ ninja

Но, конечно, вы также можете установить псевдоним

alias runNinja='/home/user/Project/sub1/sub2/sub3/ninja'

И выполнять откуда угодно:

$ runNinja

Если вы намеренно хотите находиться в этом каталоге при запуске этого (Примера :, если вы обрабатываете какой-либо файл в качестве ввода/вывода из этого каталога или зависимости ), вы должны написать функцию, как показано ниже в ваш ~/.bashrc файл или профиль:

runNinja() { cd /home/user/Project/sub1/sub2/sub3 &&./ninja "$@" }
3
19.03.2021, 02:28

Псевдонимы в bashзаписываются

alias ninja="$HOME/Project/sub1/sub2/sub3/ninja"

(без пробелов вокруг=).

Я также использовал здесь переменную $HOME, которая будет расширена до пути к вашему домашнему каталогу, когда будет определен псевдоним.

Вместо этого используется функция оболочки:

ninja () {
    "$HOME/Project/sub1/sub2/sub3/ninja" "$@"
}

"$@"будет расширен до любых аргументов, которые вы можете указать в командной строке.

Если вам нужно изменить текущий каталог на $HOME/Project/sub1/sub2/sub3перед запуском ./ninja, вы также можете сделать это в функции:

ninja () (
    cd "$HOME/Project/sub1/sub2/sub3" &&
   ./ninja "$@"
)

Обратите внимание, что я поместил тело функции в подоболочку((...)). Это означает, что cdне изменит текущую директорию текущего шелла, а только в окружении в функции.

Очевидно, вы могли бы написать это как

ninja () {
    ( cd "$HOME/Project/sub1/sub2/sub3" &&./ninja "$@" )
}

Команда &&между командами cdи ninjaгарантирует, что ./ninjaне будет не выполняться в случае сбоя cd.

Функции оболочки могут быть объявлены везде, где вы обычно добавляете псевдонимы (, возможно, в~/.bashrc).

1
19.03.2021, 02:28

Вы так близко. Однако .— это не команда, а часть имени файла.

Файл .находится в каждом каталоге, это тот же каталог, в котором он находится. cd././././././никуда вас не приведет. $PWD, ., ./.и ././.— это один и тот же каталог.

Поэтому для запуска /home/user/Project/sub1/sub2/sub3/ninjaвы вводите /home/user/Project/sub1/sub2/sub3/ninjaЧтобы сделать псевдоним, вы делаете
alias ninja="/home/user/Project/sub1/sub2/sub3/ninja"

1
19.03.2021, 02:28

Теги

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