Как передать список переменных в sed в функции оболочки

Чтобы проверить, существует ли уже монтирование или нет, используйте следующую команду и проверьте наличие fuse.sshfs :

mount | grep fuse.sshfs

Также для монтирования или размонтирования файловой системы обратитесь к этой man странице.Попробуйте размонтировать ее и смонтировать снова. Больше об этом здесь

2
31.01.2017, 01:21
1 ответ

Вы не добавляете «несколько переменных». Вы добавляете строку. Самый простой интерфейс для вашей функции - это вызвать ее с одной строкой в ​​качестве аргумента:

myfunction 'test1 test2'

, а затем (без использования function в качестве имени функции, потому что это ключевое слово в некоторых оболочках)

myfunction () {
  sudo sed -i "/^STRING/ s/\$/ $1/" FILE
}

Помните, что на самом деле это не добавляет указанную строку, потому что аргумент вставляется в сценарий sed. Любые / или \ в аргументе не интерпретируются буквально. Вы можете обойти это, предварительно подготовив аргумент:

myfunction () {
  extra=$(printf '%s\n' "$1" | sed 's![\\/]!\\&!g')
  sudo sed -i "/^STRING/ s/\$/ $extra/" FILE
}

В качестве альтернативы вы можете использовать другой инструмент, такой как perl:

myfunction () {
  sudo env extra="$1" perl -i -pe '/^STRING/ s/$/\Q$ENV{extra}/' FILE
}

Если вы абсолютно хотите, чтобы ваша функция принимала серию строк в качестве аргументов и добавляла их все по порядку с помощью пробел между ними, тогда вы можете использовать "$ *" . Это расширяется до одного слова, содержащего все аргументы функции с пробелом между ними.

myfunction () {
  extra=$(printf '%s\n' "$*" | sed 's![\\/]!\\&!g')
  sudo sed -i "/^STRING/ s/\$/ $extra/" FILE
}
1
27.01.2020, 22:19

Теги

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