Как я могу динамически изменить путь в моих псевдонимах?

Одной командой find:

date_week_ago=$(date -d "7 days ago" +%Y%m%d)
find. -type d -regextype posix-extended -regex '.*/[0-9]{8}$' \
       -exec bash -c 'd=$(basename {}); (( '$date_week_ago' > $d )) && rm -rf "$d"' \;
2
06.12.2019, 18:09
3 ответа

В конце концов я решил использовать скрипт для передачи переменной $CLIENTв мои псевдонимы.

Пример:

Создайте find_client.shи используйте метод echo $PWD | awk -F / '{ print $5; }' | xargs, чтобы найти каталог клиента в этом скрипте. Повторите вывод с присоединенным полным путем.

В моем файле псевдонимов(.cshrc)создайте псевдоним, например:

alias wk 'cd `find_client.sh`'

Пока это работает так, как ожидалось.

0
27.01.2020, 22:08

Возможно, ваш скрипт помещает пустую строку в $5, потому что в вашем пути к рабочему каталогу(pwd)нет пяти переменных, но трудно сказать, не видя входной строки. Если вам нужна дополнительная помощь по этой проблеме, вам нужно обновить свой вопрос, добавив дополнительную информацию, и показать нам, как выглядит ввод, отправляемый на awk.

Я не знаю, есть ли способ сделать псевдоним динамическим, но вы можете просто преобразовать каждый псевдоним в функцию bash. Функции Bash принимают форму funct_name () {commands}и даже принимают аргументы, которые сохраняются в переменных $1, $2, $3,... и т. д. Таким образом, вы можете создать функцию bash, которая считывает в динамические данные в качестве аргумента. Например:

test () {
  echo $1
}

Будет вести себя следующим образом:

$ test abc
abc
$ test foobar
foobar

С помощью этого метода вы должны взять команду псевдонима и поместить ее на место echoв моем примере, используя $1вместо $CLIENT. Однако вам даже не нужно воссоздавать каждый псевдоним как функцию bash и использовать аргументы таким образом.

Судя по примерам команд, которые вы мне дали, вы берете имя папки из пути к рабочему каталогу и сохраняете его в переменной среды, чтобы использовать его в различных псевдонимах. Вы можете просто создать функцию bash, которая сделает эту задачу за вас. В качестве примера, вот функция bash, которая выберет путь к вашему рабочему каталогу, найдите первое имя папки (, которое вам, кажется, нужно 4-е, поэтому измените это )и сохраните его в $TESTпеременная окружения.

test () {
  var=$(pwd | awk -F / '{ print $2; }')
  export TEST=$var
}

Если вы хотите, чтобы эта функция была доступна вам всегда, добавьте вышеуказанное в свой файл .bashrc. Каждый раз, когда вы запускаете новое окно терминала, команда testбудет в вашем распоряжении. Если вы хотите добавить его в свой текущий рабочий терминал (вместо того, чтобы открывать новый ), запустите source ~/.bashrc. Затем вы можете запустить функцию в терминале, как будто это команда. Вы только что запустили test, и переменная среды обновится, и ваши команды псевдонима должны работать. Вот пример в действии:

$ pwd
/home/user
$ echo $TEST

$ test
$ echo $TEST
home

Имейте в виду,:эта команда зависит от того, в каком каталоге вы работаете. Если вы измените папку на корневую, мой пример поместит пустую строку в $TEST, потому что после первой косой черты нет строки. Возможно, поэтому awkв вашем случае печатает пустую строку, но опять же, я не могу сказать наверняка, не видя входных данных.

1
27.01.2020, 22:08

Рассмотрите возможность добавления псевдонима к cd, который будет обновлять переменную $CLIENTкаждый раз, когда вы меняете каталоги.

alias cd 'cd \!*; set client_name = `echo $PWD | awk -F / '\''{ print $5; }'\'' | xargs`; setenv CLIENT $client_name'

У этого, конечно, есть недостатки. Например, это не работает с pushdили popd, хотя вы, вероятно, могли бы обойти это с помощью похожих псевдонимов. Могут быть и другие угловые случаи, которые я не полностью рассмотрел.

Также подумайте, действительно ли псевдонимы, которые вы храните в файле cshrc, должны быть псевдонимами. Если они не модифицируют среду оболочки каким-либо образом (, устанавливая переменные или изменяя каталоги ), вместо этого они могут быть автономными сценариями оболочки. В этом случае вы могли бы написать их, используя оболочку, которая поддерживает функции.

1
27.01.2020, 22:08

Теги

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