Команда Sed найти и заменить в файле и перезаписать файл, как инициализировать файл имеет текущий файл / скрипт - PullRequest
0 голосов
/ 26 июня 2018

Я хотел увеличить текущую десятичную переменную, поэтому я сделал следующий код

#! /bin/bash
k=1.3
file=/home/script.sh
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" "$file"
echo $k

Как вы можете видеть здесь, я должен указать файл в строке 3, есть ли обходной путь, чтобы просто сказать ему отредактировать и заменить в текущем файле. Вместо того, чтобы указывать мне на файл. Спасибо.

1 Ответ

0 голосов
/ 26 июня 2018

I думаю вы спрашиваете, как ссылаться на собственное имя скрипта, которое содержит $0, например,

#! /bin/bash
k=1.3
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" "$0"
echo $k

Подробнее о Позиционные параметры можно прочитать здесь , в частности, этот бит:

($ 0) Расширяется до имени оболочки или сценария оболочки. Это устанавливается при инициализации оболочки. Если Bash вызывается с файлом команд (см. Shell Scripts), в качестве имени этого файла устанавливается $ 0. Если Bash запускается с параметром -c (см. «Вызов Bash»), тогда $ 0 устанавливается в качестве первого аргумента после строки, которая должна быть выполнена, если она есть. В противном случае ему присваивается имя файла, используемое для вызова Bash, как указано в нулевом аргументе.

, например

$ cat test.sh
 #! /bin/bash
 k=1.3
 next_k=$(echo "$k + 0.1" | bc -l)
 sed -i "s/$k/$next_k/g" $0
 echo $k
$ ./test.sh; ./test.sh ; ./test.sh
 1.3
 1.4
 1.5
$ cat test.sh
 #! /bin/bash
 k=1.6
 next_k=$(echo "$k + 0.1" | bc -l)
 sed -i "s/$k/$next_k/g" $0
 echo $k
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...