Bash скрипт - строчка, которая комментирует сама себя

Рейтинг: 3Ответов: 2Опубликовано: 04.11.2014

Возможно ли написать на bash команду, которая комментирует сама себя в файле?

Ответы

▲ 4Принят

Как мне кажется, я нашёл идеальное решение моей задачи.
Тут самое главное переменная $LINENO, которая и показывает номер текущей строки в скрипте. Теперь можно делать скрипт, который после успешного выполнения команды сам себя комментирует.

 ls && sed -i ''$LINENO' s/^/#/' $0
▲ 5

Ну например:

[vladd@Kenga] [19:49:21] [~]
{0,120}$> cat selfmod.sh
#!/bin/bash

echo start
T=$(mktemp -u) && sed '/DELETETHISLINE/s/^/#/' <$0 >$T && rm -f $0 && mv $T $0
echo finish

[vladd@Kenga] [19:49:24] [~]
{0,121}$> ./selfmod.sh
start
finish

[vladd@Kenga] [19:49:29] [~]
{0,122}$> cat selfmod.sh
#!/bin/bash

echo start
#T=$(mktemp -u) && sed '/DELETETHISLINE/s/^/#/' <$0 >$T && rm -f $0 && mv $T $0
echo finish

Если нужно не пересоздавать файл, можно так:

#!/bin/bash

echo start
sed -i '/DELETETHISLINE/s/^/#/' "$0"
echo finish

Оказывается, sed умеет редактировать файл in place, так что получилось даже проще.