Как Ignacio Vazquez-Abrams уже упоминалось, не используют псевдонимы. Фактически, это даже записано в Aliases section of the reference manual:
Для почти всех целей функции оболочки предпочтительнее над псевдонимами.
Таким образом, вы будете нуждаться в этой функции:
do_something() {
[[ -n $1 ]] && cp -rnvt ~/test folder-"$1"
}
Если вам не нравится, как я написал cp
со всеми опциями, просто удалите их. Для информации:
-n
так, чтобы не перезаписать существующий файл/папку
-v
так, чтобы быть многословным
- каталог Следующий
-t
является целевой каталог
(мне нравится напишите мой cp
s вот так, ваша версия cp
может не справиться с этим, но, скорее всего, так и будет).
Существует также проверка, чтобы убедиться, что аргумент был дан до запуска cp
.
До сих пор нет ничего лучше, чем другие ответы. Что касается завершения, вот что вы можете сделать:
_do_something() {
COMPREPLY=($(
shopt -s nullglob extglob
files=(folder-+([[:digit:].])/)
for ((i=0;i<${#files[@]};++i)); do
files[i]=${files[i]#folder-}
files[i]=${files[i]%/}
done
compgen -W "${files[*]}" -- "${COMP_WORDS[COMP_CWORD]}"
))
return 0
}
complete -F _do_something do_something
Поместите это в .bashrc
(хотя это, вероятно, не самое лучшее место для доработок, вы будете настроить все это, когда вы более опытный) и наслаждайтесь!
Оттуда вы захотите расширить его до тех пор, пока он не станет прекрасным сценарием на 100000 строк. Например, я добавил параметр -n
в cp
(я считаю, что это классная функция безопасности). Затем вы можете добавить опции в функцию do_something
, например опцию --force
, которая удалит эту опцию -n
. Я не буду делать это за вас (и это выходит за рамки этого ответа), но это не так сложно.Затем убедитесь, что вы также соответствующим образом измените функцию завершения! Это очень весело.
Относительно запроса на закрытие: вопрос также о завершении программирования! –