Обычный способ запустить модуль при передаче параметра — использовать экземпляры и запустить unit@parameter
, а затем восстановить это значение внутри модуля с помощью %I
. Например, используя --user
для тестирования, файл~/.config/systemd/user/tryfail.service
:
[Unit]
User=otheruser
OnFailure=fail@otheruser.service
[Service]
ExecStart=/bin/bash -c 'sleep 3;exit 7'
и~/.config/systemd/user/fail@.service
[Unit]
Description=%I Instance of Fail Service
[Service]
ExecStart=/bin/bash -c 'echo got %i'
StandardOutput=journal
Теперь команды
systemctl --user daemon-reload
systemctl --user start tryfail
journalctl -f
должен показать вам сбойную службу, запущенную с otheruser
в качестве информации. Очевидно, User=
игнорируется при тестировании с помощью --user
, но это не имеет значения.
Пробовал с нижеуказанными командами awk и sed. Python работал нормально
awk-решение:
awk '{print "CRE_ff_Nodes_abc,"$0}' filename
выход
CRE_ff_Nodes_abc,abc,Nodes.csv
CRE_ff_Nodes_abc,def,Nodes.csv
CRE_ff_Nodes_abc,ghi,Nodes.csv
CRE_ff_Nodes_abc,jkl,Nodes.csv
команда2:
sed "s/^/CRE_ff_Nodes_abc,/g" filename
выход
CRE_ff_Nodes_abc,abc,Nodes.csv
CRE_ff_Nodes_abc,def,Nodes.csv
CRE_ff_Nodes_abc,ghi,Nodes.csv
CRE_ff_Nodes_abc,jkl,Nodes.csv
питон
#!/usr/bin/python
o=open('filename','r')
for i in o:
print "CRE_ff_Nodes_abc,{0}".format(i).strip()
выход
CRE_ff_Nodes_abc,abc,Nodes.csv
CRE_ff_Nodes_abc,def,Nodes.csv
CRE_ff_Nodes_abc,ghi,Nodes.csv
CRE_ff_Nodes_abc,jkl,Nodes.csv
Мы можем создать команду csvprepend
:
#!/usr/bin/gawk -f
BEGIN { field=ARGV[1]; delete ARGV[1]; OFS=","}
{ print field,$0 }
и используйте его:
$ chmod 755 cvsprepend # turn it in an executable command
$ cvsprepend "New field" old.csv
New Field,abc,Nodes.csv
New Field,def,Nodes.csv
детали:
field=ARGV[1]; delete ARGV[1]
сохраняет первый аргумент командной строки. какfield
OFS=","
задает разделитель полей вывода print field,$0
печатает новое поле, OFS, предыдущую запись.