исправление косой черты в сценарии оболочки

Вы можете использовать Vim в режиме Ex:

ex -s -c '%s/a/b/g|x' file
  1. % выбрать все строки

  2. s заменить

  3. g глобальную замену

  4. x сохранить и закрыть

2
02.04.2019, 00:19
2 ответа

У тебя получится:

#! /bin/zsh
TMPPREFIX=${TMPDIR:-/tmp}/atom.
(){ide --file=$1} =(print -r -- "$@")

И вызвать его как:

that-script "$(cmd)"

Кавычки необходимы, иначе оболочка разделит вывод $cmdна $IFSсимволов. Вот только для NL, SPC, TAB и NUL (значение по умолчанию $IFS), кавычки, обратные кавычки и т. д. не являются проблемой.

Но это больше печатать, чем делать напрямую:

ide --file =(cmd)

Или если это должно быть ide --file=fileвместоide --file file:

(){ide --file=$1} =(cmd)

=(cmd)— это специфическая для zsh -форма подстановки процессов, которая использует временный файл вместо канала (для<(...)). (){code} args— анонимная функция.

Обратите внимание, что для вывода содержимого $1, за которым следует новая строка, используется следующий синтаксис::

printf '%s\n' "$1" # POSIX
print -r -- "$1" # ksh/zsh
echo -E - $1 # zsh only

Не echo $1, который не работал бы должным образом, если бы $1содержал обратную косую черту или был чем-то вроде -n, -, -Enenne... См. Почему printf лучше, чем echo? для получения подробной информации.

1
27.01.2020, 22:08

Ваш скрипт, модифицированный:

#!/bin/sh
TEMPFILE=$(mktemp /tmp/atom.XXXX)
cat >"$TEMPFILE"
ide --file="$TEMPFILE"

Вы бы использовали это как

node main.js |./myscript.sh

Это передает вывод команды nodeна стандартный ввод вашего скрипта. Затем сценарий просто перенаправляет свой стандартный ввод во временный файл.

Как вариант,

#!/bin/sh
TEMPFILE=$(mktemp /tmp/atom.XXXX)
printf '%s\n' "$1" >"$TEMPFILE"
ide --file="$TEMPFILE"

и используйте скрипт как

./myscript "$( node main.js )"

(обратите внимание на двойные кавычки и использованиеprintf)

Я знаю, что переключился на /bin/shв приведенных выше примерах, но вы, похоже, не используете какую-либо особенно продвинутую функцию zsh, поэтому я подумал, что это будет нормально.

Связанные:

1
27.01.2020, 22:08

Теги

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