Можно также позволить оболочке сделать повторения с a for
цикл. Это - самый основной путь, который не полагается на внешние инструменты как parallel
или xargs
, и я нахожу самым легким понять:
for name in $(printf "s%02i " $(seq 1 50)); do
mkdir $name
cp test.txt $name
done
Существует миллион других способов записать это, например:
for name in $(seq -w 1 50); do
mkdir s$name
cp test.txt s$name
done
Если бы Вы хотите проверить то, что было бы выполнено прежде, чем сделать его, можно сделать что-то как предварительное ожидание команд с echo
, который распечатает строку вместо того, чтобы выполнить его:
for name in $(seq -w 1 50); do
echo mkdir s$name
echo cp test.txt s$name
done
выводы:
mkdir s01
cp test.txt s01
mkdir s02
cp test.txt s02
mkdir s03
cp test.txt s03
# etc.
Можно попытаться запустить скрипт с pwd
прежде, чем назвать исполняемый файл, чтобы видеть, изменяет ли Ваш сценарий каталог после выполнения первого исполняемого файла.
pwd
../filename {options} {parameters} &
pwd
../filename {options2} {parameters} &
pwd
../filename {options3} {parameters} &
pwd
../filename {options4} {parameters} &
Это походит на то, что необходимо знать, текущее местоположение сценария, независимо от того, как это звонило (или с полным путем, относительным путем, или через $PATH оболочки). После того как Вы знаете, что, можно затем сослаться другой исполняемый файл через путь относительно текущего местоположения.
Можно получить текущее местоположение под управлением сценария со следующим:
MYLOC=`dirname $0`
... и затем выполненный Ваш относительный исполняемый файл с помощью этой переменной:
$MYLOC/../filename
Это работает независимо от текущего рабочего каталога (например, $pwd) и даже работает, если Ваш сценарий найден и выполнен через $PATH оболочки... с тех пор, если сценарий выполняется через полный или относительный путь, 0$ имеет присваиваемое значение... или, если сценарий, выполняются путем поиска $PATH оболочки, то 0$ содержат абсолютный, полный путь в файл сценария.
dirname $0
находится в одинарных левых кавычках не одинарные кавычки. Использование символа одинарной левой кавычки (несмещенная тильда на большинстве клавиатур) заставит содержание быть замененным выводом команды включения. Я верю этому is the same as$ (команда), но синтаксис обратной галочки является значительно старше (и более общим)
– Tim Peoples
01.11.2013, 01:20
Вы, вероятно, изменяете текущий рабочий каталог, когда Вы используете ../filename
. Так, лучше должен использовать в Вашем script_file.sh
следующие строки:
current_directory=$(pwd)
../filename {options} {parameters} &
cd $current_directory
../filename {options2} {parameters} &
cd $current_directory
../filename {options3} {parameters} &
cd $current_directory
../filename {options4} {parameters} &
Это даст Вам наверняка ожидаемый результат.
../filename
каталог изменений, это - подпроцесс, таким образом, родитель не чувствует различия. Linux
– orion
17.06.2015, 11:28
преобразование .crt
в .pem
с помощью
openssl x509 -in ${CLIENT}.crt -out ${CLIENT}.pem -outform pem
может потребоваться указать ключ
openssl x509 -in ${CLIENT}.crt -inkey ${CLIENT}.key -passin pass:foobarbaz -out ${CLIENT}.pem -outform pem
(предполагая, что foobarbaz - это пароль)
-121--102927-Я не понимаю, сейчас это работает.
Возможно, перезагрузка потребовалась после установки библиотеки python...
-121--244792-Вы используете symlinks?
Для написания надежных сценариев не следует использовать «dirname $0». Он относится к команде $0, которая связана с вызывающей командой. При навигации по каталогам используйте вместо этого «readlink -f $0».
basedir="$(dirname $(readlink -f $0))"
$basedir/../filename {options} {parameters} &
readlink -f
даст вам абсолютный путь к вашему сценарию, независимо от ссылки, рабочего каталога и т.д.
$PATH
определяется перед Вашими выполнениями сценария. Можно проверить это путем выполнения/usr/bin/env
использование это - полный путь в начале Вашего сценария. – Will 11.05.2015, 05:00