Как сохранить команду и параметры в отдельных переменных в bash - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь создать сценарий bash, который запрашивает каталог, а затем запрашивает параметры (оба с использованием диалоговых окон), но я не могу заставить его работать.

Если каталог$directory и параметры сохраняются как $options Я предполагал, что команда будет:

ls $options $directory

Но пока это не сработало.Команда не выполняется, так как она пытается запустить параметры как каталоги.Частично проблема заключается в том, что входные данные из контрольного списка возвращаются с двойными кавычками, но я не уверен, как их удалить.Кроме того, если я запускаю:

ls "-A" ~

, тогда команда работает нормально, но через скрипт bash (и я проверил это с помощью отладчика) точно такая же строка не будет выполненас использованием переменных или в виде жестко закодированной строки.

Я что-то упускаю из виду?Я могу опубликовать фактический код, который я использовал, если это поможет.

Ответы [ 3 ]

1 голос
/ 25 марта 2012

похоже, вам нужно избавиться от "". Вы можете достичь этого так:

options3=${options3:1}
options3=${options3%?}

или

options3=`eval echo $options3`

#!/bin/bash

directory=$2
options=$1
options2="-l"
options3="\"-l\""

# correct
#echo "options: $options"
#ls $options $directory

#echo
#echo

# correct
#echo "options: $options2"
#ls $options2 $directory

#echo
#echo

# incorrect
# echo "options: $options3"
# ls $options3 $directory

# correct
options3=${options3:1}
options3=${options3%?}
echo "options: $options3"
ls $options3 $directory

# correct
options3=`eval echo $options3`
ls $options3 $directory
0 голосов
/ 25 марта 2012

Возможно, у вас проблемы с расширением тильды. Используйте eval в переменной, чтобы разрешить подстановку.

#!/bin/bash
options="-A"
directory="~"
directory=`eval "echo $directory"`
ls $options $directory
0 голосов
/ 25 марта 2012

Вы можете использовать $ 0 и $ 1 (я также забыл, что это могут быть $ 1 и $ 2) $ 1 будет первым параметром. Так что в вашем случае это был бы словарь. EX: ls car

...