Как я могу использовать искаженные команды с xargs?

В вашей строке даты отсутствует день, поэтому вы можете сами добавить день и указать формат, в котором он находится сейчас, чтобы создать объект даты. Затем вы можете отобразить этот объект даты в любом формате:

$From = "January, 2018";
$From = DateTime::createFromFormat('d, M, Y','1,'.$From);
$From = $From->format('Y-m-d');
// Outputs 2018-01-01

Подробнее о createFromFormat можно прочитать здесь: http://php.net/manual/en/datetime.createfromformat.php [111 ]

26
задан Nathan Fellman 8 March 2010 в 12:02
поделиться

6 ответов

Псевдонимы зависят от оболочки - в данном случае, скорее всего, от bash. Чтобы выполнить псевдоним, вам нужно выполнить bash, но псевдонимы загружаются только для интерактивных оболочек (точнее, .bashrc будет читаться только для интерактивной оболочки).

bash -i запускает интерактивную оболочку (и исходники .bashrc). bash -c cmd запускает cmd .

Соедините их вместе: bash -ic cmd запускает cmd в интерактивной оболочке, где cmd может быть функцией / псевдонимом bash, определенным в вашем .bashrc .

find -name \*bar\* | xargs bash -ic gi foo

должен делать то, что вы хотите.

Изменить: я вижу, вы пометили вопрос как «tcsh», поэтому решение, специфичное для bash, неприменимо. С tcsh вам не нужен -i , поскольку он, кажется, читает .tcshrc, если вы не укажете -f .

Попробуйте следующее:

find -name \*bar\* | xargs tcsh -c gi foo

Это сработало для моего базового тестирования .

30
ответ дан 28 November 2019 в 07:18
поделиться

Простое решение в Вас случай состояло бы в том, чтобы развернуть Ваш встроенный псевдоним. Но это допустимо для csh/tcsh только.

find -name \*bar\* | xargs `alias gi` foo

для удара это будет более хитрым, не настолько удобным, но все еще могло бы быть полезным:

find -name \*bar\* | xargs `alias gi | cut -d "'" -f2` foo
0
ответ дан 28 November 2019 в 07:18
поделиться

Превратите "gi" в сценарий вместо

, например, в / home / $ USER / bin / gi :

#!/bin/sh
exec /bin/grep -i "$@"

не забудьте отметить исполняемый файл.

7
ответ дан 28 November 2019 в 07:18
поделиться

Предложение здесь состоит в том, чтобы избежать xargs и использовать цикл «while read» вместо xargs:

find -name \*bar\* | while read file; do gi foo "$file"; done

См. Принятый ответ в ссылке выше для уточнения решения с пробелами или новой строкой в ​​именах файлов.

6
ответ дан 28 November 2019 в 07:18
поделиться

Для tcsh (который не имеет функций) вы можете использовать:

gi foo `find -name "*bar*"`

Для bash / ksh / sh вы можете создать функцию в оболочке.

   function foobar 
   {
      gi $1 `find . -type f -name "*"$2"*"`
   }

   foobar foo bar

Помните, что использование обратных кавычек в оболочке более выгодно, чем использование xargs с нескольких точек зрения. Поместите функцию в свой .bashrc.

0
ответ дан 28 November 2019 в 07:18
поделиться

Используя Bash, вы также можете указать количество args, передаваемых вашему псевдониму (или функции), следующим образом:

alias myFuncOrAlias='echo'  # alias defined in your ~/.bashrc, ~/.profile, ...
echo arg1 arg2 | xargs -n 1 bash -cil 'myFuncOrAlias "$1"' arg0

(должно работать для tcsh аналогичным образом)

# alias definition in ~/.tcshrc
echo arg1 arg2 | xargs -n 1 tcsh -cim 'myFuncOrAlias "$1"' arg0  # untested
0
ответ дан 28 November 2019 в 07:18
поделиться
Другие вопросы по тегам:

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