Además de la respuesta de Gilles alCan I block non-interactive sudo invocation?
aspecto de su pregunta, sugeriría un trabajo -para este elemento particular de su situación:
I don't like typing the password for sudo so I disabled it
y
Now I have a bad side effect that any shell script I run can silently execute sudo on my behalf.
Si su situación es que normalmente sudo
ejecuta varios comandos, pero luego se encuentra ejecutando secuencias de comandos que ejecutan silenciosamente sudo donde no se le solicita una contraseña para darse cuenta de que root -están pasando cosas, tú podrías:
Ya sabes cómo editar sudoers para la opción NOPASSWD
.
Para ampliartimestamp_timeout
en el archivo sudoers, configúrelo en un valor realmente alto o negativo. Fragmentos relevantes de la página del manual para ese parámetro:
timestamp_timeout
Number of minutes that can elapse before sudo will ask for a passwd again.
The default is 5.
If set to a value less than 0 the user's time stamp will not expire until the system is rebooted.
Cuando se encuentre a punto de ejecutar un script del que no esté seguro, simplemente ejecutesudo -k
para "matar" la marca de tiempo:
-k
When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required.
Si ejecuta un script y Sudo le solicita su contraseña, sabrá que sudo
fue invocado y podrá interrumpir el script si lo desea.
Como un aparte aquí, recomiendo configurar el parámetro passprompt para incluir el texto sudo
en él, como:
Defaults passprompt="[sudo] password for %u:"
... para que sea obvio si/cuando Sudo solicita su contraseña (frente a cualquier otra herramienta ).
Использование csvformat
из csvkit:
$ csvformat -d '|' file.csv
India,Andhra,"asd,ged,ijn",telangana,41657,"hgjd,dfef,edf",dfd
Инструменты в наборе инструментов csvkit поддерживают CSV -(, все они являются синтаксическими анализаторами CSV для изменения и запроса и обычно работают с CSV-файлами в командной строке ).
Здесь я использую csvformat
для переформатирования входного файла и указываю, что разделитель полей во входных данных является вертикальной чертой, используя -d '|'
. Вывод по умолчанию будет использовать запятые в качестве разделителей полей, и инструмент будет экранировать и цитировать вещи по мере необходимости.
Если у вас установлен ruby :
ruby -rcsv -e '
rdr = CSV.new(File.new(ARGV.shift), col_sep: "|")
wtr = CSV.new($stdout)
rdr.each {|row| wtr << row}
' file.csv
India,Andhra,"asd,ged,ijn",telangana,41657,"hgjd,dfef,edf",dfd