Системный вызов awk с инвертированным эффектом

На случай, если какая-нибудь другая бедная душа будет бороться с этим, вот мой ~/.tmux.conf файл. Я использую менеджер плагинов tmux, поэтому сначала установите его.

# ./tmux.conf

# Powerline…
run-shell "powerline-daemon -q"
source '~/.local/lib/python2.7/site-packages/powerline/bindings/tmux/powerline.conf'

# VI-mode…
setw -g mode-keys vi

# C-b is not acceptable -- Vim uses it
set-option -g prefix C-a
bind-key C-a last-window

# Set windows modes styles
set -g mode-style "fg=black,bg=colour69"

# Renumber windows
set -g renumber-windows on

# Automaitcally rename.
setw -g automatic-rename

# Allows for faster key repetition
set -s escape-time 0

# Scroll History
set -g history-limit 30000

# Mouse
set -g mouse on # ← This stops the default correct behaviour…

# List of plugins
set -g @plugin 'tmux-plugins/tpm' # ← The tmux plugin manager.
set -g @plugin 'nhdaly/tmux-scroll-copy-mode' # ← sane scrolling.
set -g @plugin 'tmux-plugins/tmux-yank' # ← Yanking.
set -g @shell_mode 'vi'  # tmux-yank option.
set -g @yank_selection 'primary'  # tmux-yank option.

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
# EOF

Итак, вы можете использовать мышь для выделения любого текста. Если вы нажмете y перед тем, как отпустить левую кнопку мыши, выделение будет скопировано в основной буфер, который вы можете вставить с помощью среднего клика мыши.

2
16.11.2016, 20:04
2 ответа

Хорошо, я понял: проблема заключается в разных определениях ИСТИНА и ЛОЖЬ между статусом выхода test и условием цикла while в awk .

Положительная команда test дает код выхода 0 для ИСТИНА и отрицательный в 1 для ЛОЖЬ.

Однако в awk цикл while интерпретирует 0 как ЛОЖЬ, а 1 как ИСТИНА, так что в точности противоположное определение.

В качестве примера:

awk '{ while ( 0 ) ; { print "0" } }' file

не выдаст никакого вывода, а

awk '{ while (1) ; { print "1" } }' file

выведет бесконечное число 1 с.

Таким образом, передовой опыт должен быть явным в такой комбинации

while ( system("command") == 0 )

или

while ( system("command") == 1 )

соответственно.

Итак, в моем случае

while ( system("test -e " file ) == 0 ) 

показывает ожидаемое поведение.

2
27.01.2020, 21:59

awk system () возвращает статус завершения выполненной вами команды - 0 в случае успеха и! = 0 в случае неудачи. В качестве простого примера вы можете попробовать запустить:

v = system("date");

v будет 0

, если вы запустите:

v = system("dat");

v может быть 127 или значение, отличное от 0, ошибка возвращается из ОС, если команда dat отсутствует или не найдена.

1
27.01.2020, 21:59

Теги

Похожие вопросы