Скрипт Bash с mv не будет работать

Я написал следующий скрипт bash:

alias uploadToCloud='
say "Which file would you like me to upload, $name?"
echo "File?"
read $file
mv $file ~/Dropbox
say "It will be online soon."
echo "The file will be online soon."
'

Но при запуске я получаю следующий вывод:

usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

Я действительно не уверен, что я делаю неправильно.


person Aslet    schedule 25.05.2013    source источник


Ответы (1)


Сделайте функцию вместо псевдонима в файле вашего профиля. Что-то вроде этого -

uploadToCloud() {
    echo "which file"
    read file
    mv "$file" ~/Dropbox
}

Функцию следует использовать, когда вам нужно сделать что-то более сложное. Ваше требование является прекрасным примером функции, потому что оно слишком сложно для псевдонима.

Псевдоним следует использовать для задач, которые эффективно изменяют параметры команды по умолчанию.

person jaypal singh    schedule 25.05.2013
comment
Функция +1 действительно намного лучше, чем псевдоним в этой ситуации. также указал на проблему в строке чтения. - person Kent; 26.05.2013
comment
@Кент, спасибо, Кент. Я даже не видел проблемы в read line. Я только что видел, как alias использовался для чего-то подобного, поэтому предложил function. :) - person jaypal singh; 26.05.2013
comment
Я пойду с +1 за исправление проблемы read file (вместо read $file). Я не уверен, что кто-то будет выполнять код достаточно часто, чтобы сделать его псевдонимом или функцией — в моей экосистеме это будет сценарий оболочки (и он будет принимать имена файлов в качестве аргумента, по крайней мере, в качестве основного интерфейса). Тем не менее, я старый придурок в таких вопросах — современный стиль, кажется, заключается в том, чтобы загрузить как можно больше в память, чтобы сэкономить несколько миллисекунд в тех редких случаях, когда что-то нужно. - person Jonathan Leffler; 26.05.2013