В настоящее время у меня есть сценарий Unix (написанный на bash), который выполняет несколько команд для изменения группы файлов, которые я указываю с помощью flist, содержащего их пути. Основная идея сценария - создать каталог, поместить файлы из flist в этот каталог, а затем выполнить последующие процессы, некоторые из которых создают больше каталогов.

Проблема, с которой я столкнулся, заключается в том, что я должен указать точный путь к файлу, в котором я хочу, чтобы каталоги находились внутри самого скрипта. Итак, мой вопрос: есть ли способ написать сценарий так, чтобы я мог ввести команду, а затем путь к папке назначения, где я хотел бы, чтобы сценарий выполнялся в командной строке и имел начальный и все последующие каталоги, созданные сценарием в начальном каталоге без необходимости указывать какой-либо из их путей (т. е. 'command /destination /path /for /script /')?

Извинения, если это немного затянуто. Я довольно новичок в Unix и у меня очень мало опыта (и, следовательно, я не смог придумать лучшую формулировку). Любая помощь приветствуется!

2 ответа2

3

Если я вас правильно понимаю, вы спрашиваете, как передать значения в скрипт bash. Это очень просто, например:

#!/usr/bin/env bash
directory=$1;
echo "Directory is $directory"

$1 - это первый аргумент командной строки скрипта bash. $2 - второе и т.д. И т.д. Итак, вы можете запустить приведенный выше скрипт так:

./foo.sh /path/to/bar
Directory is /path/to/bar

Если вы хотите, чтобы команда также была переменной, вы можете сделать что-то вроде этого:

 #!/usr/bin/env bash
 command=$1;
 directory=$2
 $command $directory

Итак, чтобы запустить ls /etc , вы должны запустить приведенный выше скрипт следующим образом:

./foo.sh ls /etc
0

Я предполагаю, что у вас есть файлы в определенном месте (/path/to/originals) и вы хотите скопировать их в целевое местоположение (/path/to/destination) и изменить их впоследствии. Ваш текущий скрипт выглядит так:

mkdir /path/to/destination
cp /originals/this-file /path/to/destination
cp /originals/this-other-file /path/to/destination
modify-somehow /path/to/destination/this-file
modify-somehow /path/to/destination/this-other-file

но вам не нравится иметь жесткий код / путь / к / месту назначения везде. Таким образом, вы можете попросить использовать "значение первого позиционного параметра" вместо жесткого кодирования /path/to/destination . Как уже упоминалось, значение первого позиционного параметра составляет $1 .

Итак, ваш сценарий должен быть:

mkdir $1
cp /originals/this-file $1
cp /originals/this-other-file $1
modify-somehow $1/this-file
modify-somehow $1/this-other-file

И вы должны вызвать это, добавив путь назначения в качестве аргумента:

my-script /path/to/destination

Я пытался сделать скрипт простым, но вы могли бы улучшить его, например, используя одну команду cp для копирования нескольких файлов. Вы также можете использовать переменную для вашего пути /originals (но вместо аргумента этот звучит как объявление константы в начале вашего скрипта)

Наконец, учтите, что если в именах ваших файлов есть пробелы, вам нужно заключить свои $1 в двойные кавычки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .