$ perl -MText::CSV_XS=csv -e'csv(in=>csv(in=>"file",sep=>";",allow_whitespace=>1),sep=>";",quote_space=>0);'
some name;another thing;random;value value value value value
;
просто разделяет команды, чтобы они выполнялись одна за другой.
Здесь, если вы введете это в приглашении интерактивной оболочки, локальное эхо терминального устройства будет отключено и снова включено к тому времени, когда вы вернетесь к приглашению, пока вы выходите cat
в обычном режиме (с Ctrl + D два раза или на пустой строке ).
Если cat
прерывается сигналом SIGINT или SIGQUIT (, если нажать Ctrl + C или Ctrl + \), такие оболочки, как bash
, отменяют всю командную строку, поэтому команда stty echo
будет не запущена, и локальное эхо не будет повторно включено.
В оболочке zsh
вы могли бы сделать вместо этого:
STTY=-echo cat -vt
Специальный синтаксис для изменения некоторых настроек tty только на время действия команды. Таким образом, настройки tty будут восстановлены, даже если cat
будет прервано.
Хотя zsh
в любом случае всегда восстанавливает локальное эхо tty.
В bash
вы могли бы сделать что-то подобное с вспомогательной функцией:
with_different_tty_settings() (
tty_settings=$(stty -g) # save current settings
trap 'stty "$tty_settings"' INT EXIT QUIT
set -o noglob
local IFS
stty $STTY # split $STTY on default IFS characters
"$@"
)
И вызовите cat
как:
STTY=-echo with_different_tty_settings cat -vt
(в отличие от zsh
STTY
, он не обрабатывает приостановку задания (с Ctrl + Z , например )хотя ).
Если вы измените его на STTY='-echo -isig'
, вы сможете увидеть, какой символ Ctrl + C отправляет.
С помощью STTY='raw -echo'
вы сможете видеть все символы (и не измененные дисциплиной линии tty, и как только вы их введете ), но тогда вы не сможете не иметь возможности прекратить cat
.
Но вы можете выполнить STTY='raw -echo time 30 min 0'
, чтобы cat
выйти через 3 секунды бездействия.