Заработало. Закончилось этим
#!/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
Просто добавьте путь в переменной $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 "$@" }
Псевдонимы в 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
).
Вы так близко. Однако .
— это не команда, а часть имени файла.
Файл .
находится в каждом каталоге, это тот же каталог, в котором он находится. 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"