На этот вопрос уже есть ответ здесь:
Если я создам сценарий в файле вроде этого:
#!/bin/bash
echo "test"
Насколько я знаю (как новичок), это поместить его в какую-то папку, затем сделать его исполняемым с помощью
chmod +x myscript
, а затем выполнить его с помощью чего-то вроде ./ myscript
.
Я думаю, что это непросто, если мне придется создавать файл для каждой создаваемой мной команды. Думаю, будет проще, если я смогу просто поместить его в один файл, а затем сделать его исполняемым, не добавляя ./
перед каждой созданной мной командой. Возможно ли это?
функции Bash ведут себя почти такие же как команды. Можно поместить функции в - например - ~/.bashrc файл, как
hello() {
echo Hello World!
}
Тогда можно выполнить это как любая другая команда, пока Вы запускаете его со своей оболочки, а не с задания крона, init сценарий и т.д.:
me@pc:~$ hello
Hello World!
, значение по умолчанию ~/.profile файл добавляет ~ / каталог bin к Вашему пути, если тот каталог существует. Поэтому создайте каталог bin в своей домашней папке и поместите свои сценарии в тот тот каталог. Все еще необходимо использовать chmod +x
на сценариях, но Вы не должны снабжать префиксом их. /
не забывают повторно входить в систему после создания каталога bin!
Необходимо добавить ./
к командам выполнения из сценариев в локальном каталоге, потому что команды, которые не содержат /
на их имя, ищутся только в каталогах, упомянутых в эти $PATH
значение. Обычно то значение содержит только полные пути, и в особенности не содержит путь .
, так, чтобы на текущий рабочий каталог не смотрели. Это - Хорошая Вещь, потому что иначе можно было попытаться обмануть пользователей в выполняющиеся сценарии, не намереваясь сделать так путем размещения сценариев с именами, соответствующими общим командам такой как ls
в определенных каталогах; также это не обычно очень практично для создания определенных команд только видимыми, когда текущий каталог имеет некоторое определенное значение.
естественное решение состоит в том, чтобы иметь определенный каталог, были Вы, помещают частные команды, которые Вы хотите быть в состоянии назвать и гарантировать, что (абсолютное) название того каталога происходит в $PATH
. Традиционное место для такого каталога $HOME/bin
.
Я имею набор псевдонимов и окружаю функции, определяемые в моем ~/.bashrc
alias ll='ls -lh'
alias li='ls -lhi'
alias lll='ls -lhL'
alias l='ll'
complete -F _longopt l ll lll li # this doesn't actually work
psg(){ ps aux | grep ${*:-$USER} | grep -v grep; }
psgw(){ ps auxww | grep ${*:-$USER} | grep -v grep; }
# expand aliases for sudo
alias sudo='sudo '
alias imv='imv -i'
alias mv='mv -i'
alias cp='cp -i'
alias rm='rm -i'
alias prealloc-mv='rsync --remove-source-files --sparse --preallocate -aH'
alias m=less
export LESS=iMRj5
alias j='jobs -l'
alias dr='disown -r'
cmpll() { ll "$@"; cmp "$@" && echo identical; }
findll() { find "$@" -exec ls -dlh --color=auto {} +; }
findinamell() {
local i args=()
for i in "$@";do
args+=( '-iname' )
args+=( "*$i*" )
done
findll "${args[@]}";
}
, Как другие указали, ~/bin
находится в Вашем $PATH
по умолчанию, если он существует, таким образом, можно поместить вещи, которые являются слишком большими для псевдонима или окружают функцию там. У меня на самом деле есть несколько действительно маленьких сценариев в моем ~/bin
, IDK, почему я решил сделать их файлами вместо псевдонимов. Поиск "ВЫПОЛНЕНИЯ КОМАНДЫ" в странице справочника удара для получения дополнительной информации о том, как интерпретируются команды. man bash
.
, Если я готовлю некоторые команды, которые только применимы к чему-то, я продолжаю работать в определенном каталоге, я мог бы хорошо поместить команды в файл там и выполнить его с./do-stuff.sh. Ваши пальцы привыкнут к вводу ./
довольно быстро. Вы могли бы также сохранить текстовый файл полезных команд, которые Вы использовали, наряду с описанием того, что они делают. Я делаю это иногда, когда я не думаю, что это стоит времени для превращения его в функцию или сценарий, который берет параметры, но вместо этого просто вставьте его в и отредактируйте его как соответствующий. например, для того, чтобы воспроизвести аудиокниги, я часто использую:
mpl() { t=2200; mplayer -ss $(($t * ($1%2))) -endpos $(($t+5)) disc$(printf '%02d' $((1 + $1/2)))-38.mp3; date; }; mpl 4
(это играет 2 200 секунд аудио, запускающегося в любом начало (нечетный 1$), или 2 200 секунд в, к одной из многих пронумерованных дорожек. В основном отобразите линейный индекс в ряд звуковых файлов, которые являются каждым два блока слушания долго.)
я могу стрелка вниз и редактировать самый конец командной строки с моим монитором прочь, в то время как я заснул. Я использую функцию оболочки, таким образом, первая часть должна отредактировать, является правильным в самом конце. Псевдонимы только работают, если все аргументы могут пойти прямо в конце фиксированной части команды.
я уверен, что существует тонна хорошего материала там, если Вы гуглите, но существует, вероятно, тонна устаревших и менее - полезный материал также, и я не хочу занимать время для оценки руководства прямо сейчас.
Вы можете всегда он в каталоге bin. Или, скажем, это - она сценарий в местоположении/home/user/Desktop/hello.sh, можно открыть ~/.bashrc и добавить к нему
hello() {
'/home/user/Desktop/hello.sh'
}
Затем можно выполниться 'привет' в терминале, и это должно работать отлично.