Можно использовать Редактор изображений GIMP и использовать Экспорт в инструмент. Используйте Ctrl-Shift-E в качестве ярлыка.
Или Вы могли использовать convert
от imagemagick
:
convert filename.xcf filename.png
Вы могли также использовать xcftools
(sudo склонный - получают установку xcftools), которому назвали утилиту xcf2png
это делает это задание отлично.
xcf2png image.xcf -o image.png
strace
не запускает rm -i
по той же причине, что и:
echo rm
не выводит rm -i
.
Псевдонимы - это особенность некоторых оболочек, позволяющая автоматически заменять одни строки другими при нахождении в командной позиции.
В:
alias foo='whatever'
foo xxx
Оболочки расширяют это до:
whatever xxx
, и это проходит еще один раунд интерпретации, в этом случае приводя к выполнению команды something
.
псевдонимы раскрываются только в том случае, если они находятся в командной позиции (как первое слово командной строки).
zsh
поддерживает глобальные псевдонимы.
Вы можете сделать:
alias -g rm='rm -i'
Но вы не захотите, так как это будет означать, что:
echo rm
выведет, например, rm -i
.
Предположим, что у нас есть определение псевдонима псевдоним rm='rm -i'
в нашей ~/.bashrc
. Псевдоним добавляет возможность подсказки перед удалением каждого файла:
$ touch ./file
$ rm ./file
/bin/rm: remove regular empty file ‘./file’?
Это не вина strace
, что он не использовал псевдоним:
.
Это никак не связано с псевдонимами.
В команде
$ strace -f -e file -o rm.strace rm ./file
rmrm
и ./file
пока просто аргументы для строки - оболочка не может развернуть псевдоним rm
, потому что не может знать, что строка будет использовать эти аргументы как команда позже.
В общем случае, псевдонимы команд могут быть использованы только там, где это возможно.
Псевдонимы являются особенностью оболочки, и strace
вообще не использует оболочку, когда вызывает команду из командной строки. Вместо этого она использует exec()
с командами и аргументами из собственной командной строки.
Внутри строки
команда будет вызвана с чем-то похожим на exec("rm", "file")
, а exec()
найдет /bin/rm
в PATH - без использования оболочки командной строки.
Почему бы не включить оболочку в команду strace
?
$ touch ./file
$ strace -f -e file -o rm.strace bash -c 'rm ./file'
$ ls ./file
ls: cannot access ./file: No such file or directory
Хм... это не сработало. rm
только что удалил файл, без подсказки -i
.
Псевдонимы обычно включаются только в интерактивных оболочках, реальных командных строках терминала.
В нашем примере псевдоним легко понять, почему это имеет смысл: если бы псевдоним rm -i
был бы расширен внутри сценариев оболочки, он бы зависал в первом rm
, а там никого бы не было, чтобы нажать y
.
Псевдонимы управляются опцией оболочки expansion_aliases
. Опцию можно установить с помощью bash +O expand_aliases -c ...
. Но этого недостаточно, так как неинтерактивная оболочка также не будет считывать ~/.bashrc
. Это значит, что наш псевдоним не только отключен опцией, но и даже не определен.
Легкий способ обработки обеих частей - использовать опцию командной строки -i
, чтобы заставить оболочку притворяться интерактивной:
$ touch ./file
$ strace -f -e file -o rm.strace bash -i -c 'rm ./file'
/bin/rm: remove regular empty file ‘./file’?
-i наконец-то был использован псевдоним -i
!
Обратите внимание, что вы обычно не используете оболочки, работающие с опцией -i
для скриптинга, даже если вы хотите, чтобы псевдонимы были доступны, например.
strace использует execve c function
, например, find command
, однако find использует exec function
Нельзя использовать псевдонимы
, встроенные команды оболочки
или так далее.
Необходимо выполнить:
strace /bin/rm -i ramesh
-121--46499- Псевдоним является особенностью оболочки. Однако strace выполняет команду напрямую (используя execve
, вероятно), что не включает оболочку. (Если strace выполняет заданную команду через оболочку, то выходные данные strace будут содержать все syscalls выполнения оболочки, а не только данные из интересующего процесса.)
Кроме того, когда вы запускаете strace rm ramesh
, интерактивная оболочка не пытается заменить ваш псевдоним в аргументах на strace, потому что это было бы ужасно запутано для всех. Оболочка расширяет только те псевдонимы, которые отображаются в первой позиции командной строки.
strace
использует переменную среды PATH
для определения местоположения отслеживаемой программы, а не для ее выполнения через оболочку (что приведет к загромождению выходных данных). Псевдоним оболочки не является программой, это функция оболочки, и поэтому strace
игнорирует ее.
Выполнение strace rm
является довольно просветительным, а также интересно рекурсивным.
Псевдоним является особенностью вашего shell'а. Однако, strace выполняет команду напрямую (используя execve
, вероятно), что не связано с оболочкой. (Если бы strace выполнил данную команду через оболочку, то вывод strace содержал бы все системные уровни выполнения оболочки, а не только те, которые были получены в интересующем процессе)
Более того, когда вы запускаете strace rm ramesh
, интерактивная оболочка не пытается заменить ваш псевдоним в аргументах на strace, потому что это было бы ужасно запутано для всех. Оболочка только расширяет псевдонимы, которые появляются в первой позиции командной строки.
strace использует execution c function
, например find command
, однако find use exec function
Вы не можете использовать aliases
, встроенную команду оболочки
и так далее.
Вы должны сделать:
strace /bin/rm -i ramesh
Чтобы построить ответ Стефана Чазеласа, если вы определяете
alias strace="strace "
(с пространством в конце), то команда
strace rm ramesh
будет обработана , будет обрабатываться как
strace rm -i ramesh
, но даже это будет работать только для первого слова После вспышки
,
Так что это не будет применено непосредственно к вашему примеру (где у вас есть параметры вмешательства).
Но Если вы определяете
alias my_strace="strace -ff -e trace=file "
, то
my_strace rm ramesh
будет обрабатываться
strace -ff -e trace=file rm -i ramesh