Использовать версию команды для Linux вместо версии для BSD

С zshи с libnumbertext-toolsс spelloutв Debian:

#! /bin/zsh -
colors=(${(f)"$(<log1.txt)"})
adjectives=(${(f)"$(head -n ${#colors} <log2.txt)"})

/usr/lib/libnumbertext/spellout -l /usr/share/libnumbertext/en \
  -p ordinal 1-$#colors |
for color adjective in ${colors:^^adjectives}; do
  read num &&
  print -r The $num color $color is $adjective
done

(обратите внимание, что это американский -английский язык. Например, за 101 вы получите сто первый вместо сто первый )

.

Если вы не можете установить zshили какое-либо программное обеспечение, которое расшифровывает числа, но имеет список английских порядковых номеров в третьем log3.txtфайле, вы можете сделать это в большинстве оболочек, включаяbash(Bourne -, например, rc -типа, рыбу хоть):

#! /bin/sh -
awk '
  BEGIN {while ((getline a < "log2.txt") > 0) adjective[na++] = a}
  {
    if ((getline num < "log3.txt") <= 0) num = NR "th"
    print "The "num" color "$0" is "adjective[(NR-1)%na]
  }' log1.txt

(вернуться к <digits>th, если у нас закончатся английские числа ).

0
16.06.2021, 18:48
2 ответа

Найдите их все с помощью, например,. type -a column, переставьте ваш $PATHтак, чтобы каталог, содержащий нужную вам версию, находился перед каталогом, содержащим версию, которая вам не нужна. Затем введите команду rehash.

PATHредактирование сложно. Никогда не выполняйте задание PATH=, в котором нет $PATH, если только вы не уверены в том, что делаете.

Я использую функции bash _path _Стивена Коллиера, описанные в Linux Journal еще в 2000 году:

https://www.linuxjournal.com/article/3645https://www.linuxjournal.com/article/3768https://www.linuxjournal.com/article/3935

Функция addpathдобавляет запись в путь только в том случае, если ее там изначально нет. delpath -nудаляет из пути все несуществующие -каталоги.

Вы можете получить файл pathfunc.tgzизhttps://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz

0
28.07.2021, 11:24

Is there an obviously correct way to specify which of these similar commands I want to use?

Рискуя быть слишком слишком очевидным, один очевидный способ — указать полный путь к точному исполняемому файлу, который вы хотите использовать в сценарии:

#!/usr/bin/env bash

# use the col executable in /usr/bin, not that other one:
col='/usr/bin/col'

$col.........

Как указывает @muru, альтернативой может быть объявление функции col(), которая вызывает конкретный двоичный файл, который вы хотите использовать:

#!/usr/bin/env bash

# use the col executable in /usr/bin, not that other one:
col()
{
  /usr/bin/col "$@"
}

col.........
2
28.07.2021, 11:24

Теги

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