Это довольно просто:
for fname in ./*.c; do
if grep -q -F "printf" "$fname" && ! grep -q -F "#include <stdio.h>" "$fname"; then
printf 'File "%s" needs to include stdio.h\n' "$fname"
fi
done
Программа просмотрит все исходные файлы C в текущем каталоге и сообщит о любом файле, который использует printf()
без включения stdio.h
заголовка.
Однако заголовок может быть включен косвенно, поэтому, чтобы избежать ложных срабатываний, вы можете пропустить код через препроцессор C и искать заголовок в препроцессированном выводе (похоже, это работает с gcc
и clang
):
for fname in ./*.c; do
if grep -q -F "printf" "$fname" && cc -E "$fname" | ! grep -q "^#.*stdio\.h\""; then
printf 'File "%s" needs to include stdio.h\n' "$fname"
fi
done
Когда они называют это «Bash в Ubuntu в Windows», они действительно имеют в виду именно это - ярлык просто запускает исполняемый файл Bash напрямую.
Если вы получите доступ к системе каким-либо другим способом (через SSH, или запустив login
или диспетчер отображения), то он будет читать / etc / passwd
как обычно.
Проще говоря, вы можете отредактировать свой .bashrc
, чтобы подделать его. Добавить:
if [ -t 1 ]
then
exec zsh
fi
в конец.
Вы также можете создавать новые ярлыки Windows (или изменять существующие), которые порождают что-то еще - bash.exe -c / usr / bin / zsh
тоже должно работать достаточно хорошо.
Сообщается об этой ошибке . Я не думаю, что это высокий приоритет (и это не на самом деле ошибка), но любой из этих обходных путей поможет вам достаточно близко.