Bash скрипт - строчка, которая комментирует сама себя
Возможно ли написать на bash команду, которая комментирует сама себя в файле?
Источник: Stack Overflow на русском
Возможно ли написать на bash команду, которая комментирует сама себя в файле?
Как мне кажется, я нашёл идеальное решение моей задачи.
Тут самое главное переменная $LINENO, которая и показывает номер текущей строки в скрипте.
Теперь можно делать скрипт, который после успешного выполнения команды сам себя комментирует.
ls && sed -i ''$LINENO' s/^/#/' $0
Ну например:
[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, так что получилось даже проще.