bash printf дублирующая строка - PullRequest
3 голосов
/ 10 июля 2019

Я ожидаю напечатать

$ pwd: /home/me/actual_folder size: 5.3M

с:

$ cat test.sh
printf 'pwd: %s size:%s\n' `pwd` `du -sh .`
$

Но я получаю:

$ sh test.sh
pwd: /tmp/actual_folder size:5.3M
pwd: . size:
$

Как избежать последней pwd: . size: строки?

Ответы [ 2 ]

3 голосов
/ 10 июля 2019

Удалить точку с выхода du:

printf 'pwd: %s size: %s\n' `pwd` `du -sh . | cut -f1`

В противном случае вторая подстановка команд выводит два слова, поэтому printf видит 3 аргумента, поэтому повторяет шаблон для второй пары (точка и ничего).

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

printf 'pwd: %s size: %s\n' $(du -sh $(pwd) | awk '{print $2, $1}')
1 голос
/ 10 июля 2019

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

printf "pwd: %s size:%s\n" "$(pwd)" "$(du -sh)"

Но если вы не хотите "." в конце вы можете вырезать его с помощью:

 printf "pwd: %s size:%s\n" "$(pwd)" "$(du -sh | cut -d '.' -f1)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...