{"id":291067,"date":"2021-07-05T12:00:00","date_gmt":"2021-07-05T09:00:00","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/"},"modified":"2021-07-05T12:00:00","modified_gmt":"2021-07-05T09:00:00","slug":"how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/","title":{"rendered":"#How to Run a Linux Command When a File Set Changes \u2013 CloudSavvy IT"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a25db0f9cacd\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a25db0f9cacd\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/#The_entr_Command\" >The entr Command<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/#Installing_entr\" >Installing entr<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/#A_Simple_Example\" >A Simple Example<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/#Practical_Uses\" >Practical Uses<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/#Leveraging_Git\" >Leveraging Git<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/#Restarting_Servers_and_Interpreters\" >Restarting Servers and Interpreters<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-linux-command-when-a-file-set-changes-cloudsavvy-it\/#Not_Just_for_Programmers\" >Not Just for Programmers<\/a><\/li><\/ul><\/nav><\/div>\n<p><strong>&#8220;#How to Run a Linux Command When a File Set Changes \u2013 CloudSavvy IT&#8221;<\/strong><\/p>\n<div id=\"article-content-area\">\n<figure style=\"width: 700px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage  wp-image-6130 size-full\" data-pagespeed-lazy-src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/54fd2e32.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Domino effect.\" width=\"700\" height=\"300\" src=\"https:\/\/www.shutterstock.com\/image-photo\/white-toppling-domino-play-pieces-on-559715068\" data-credittext=\"Gecko Studio\/Shutterstock.com\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><figcaption class=\"wp-caption-text\"><span class=\"type:primaryImage imagecredit\"><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.shutterstock.com\/image-photo\/white-toppling-domino-play-pieces-on-559715068\">Gecko Studio\/Shutterstock.com<\/a><\/span><\/figcaption><\/figure>\n<p>Learn how to run Linux commands when any file in a watched set of files changes, and when new files are created. We show you how to use this flexible tool.<\/p>\n<h3 id=\"the-entr-command\"><span class=\"ez-toc-section\" id=\"The_entr_Command\"><\/span>The entr Command<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>You can set commands\u00a0<a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/man7.org\/linux\/man-pages\/man5\/crontab.5.html\">to run at specific times<\/a>\u00a0in Linux, using <code>cron<\/code>. It\u2019s easy, reliable, and flexible. But what if you need to have commands executed whenever a file changes, or if a new file is added to a directory? That\u2019s possible, too, and there\u2019s more than one way to do it. The <code>entr<\/code> command is a <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/eradman.com\/entrproject\/\">refreshingly straightforward<\/a>\u00a0way to achieve that functionality.<\/p>\n<p>Some systems, such as the\u00a0<a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/gohugo.io\/\">Hugo static site generator<\/a>, have a feature that automatically rebuilds your website if a file changes, or if a new file is added to the site. That little feature makes a significant difference to your workflow. With Hugo, you\u2019re able to have your development version of the website in your browser as you edit the files that make up your site. Each time you save your changes or create a file, the website is rebuilt in milliseconds, and the changes are pushed to your browser. Instant feedback is fantastic.<\/p>\n<p>The <code>entr<\/code> command brings that type of capability to any set of files. The command that is launched when a change is detected is arbitrary. It can be a standard Linux command, an alias, a shell function, or a <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">script<\/a>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Installing_entr\"><\/span>Installing entr<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To install <code>entr<\/code> on Ubuntu, use this command:<\/p>\n<pre>sudo apt-get install entr<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5988\" data-pagespeed-lazy-src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/4a47a0db.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"646\" height=\"57\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>To install <code>entr<\/code> on Fedora, type:<\/p>\n<pre>sudo dnf install entr<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5989\" data-pagespeed-lazy-src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/a8911d2f.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"646\" height=\"57\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>On Manjaro, the command is:<\/p>\n<pre>sudo pacman -Syu entr<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5990\" data-pagespeed-lazy-src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/db67a724.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"646\" height=\"57\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"A_Simple_Example\"><\/span>A Simple Example<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>We\u2019ll use the touch command to\u00a0<a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/touch.1.html\">create a text file<\/a>\u00a0called \u201cexample.txt\u201d and tell <code>entr<\/code> to monitor that file.<\/p>\n<p>The <code>entr<\/code> command accepts the filenames it should monitor via <code>STDIN<\/code> and accepts the command it should run as command line parameters.<\/p>\n<p>The easiest way to pass a filename to <code>entr<\/code> is to use <code>ls<\/code> to list it, and pipe that into <code>entr<\/code>. When the file changes, <code>entr<\/code> will launch <code>wc<\/code> command to <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/wc.1.html\">count the lines, words, and characters<\/a> in the file.<\/p>\n<p>The <code>\/_<\/code> parameter is a placeholder for the filename of the file that was passed to <code>entr<\/code>. If a group of files is passed to <code>entr<\/code>, such as <code>*.txt<\/code> , the <code>\/_<\/code> parameter would be replaced by the last file to be changed.<\/p>\n<pre>touch example.txt<\/pre>\n<pre>ls example.txt | entr wc \/_<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5994\" data-pagespeed-lazy-src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/fb5c81ed.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"646\" height=\"197\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Each time the changes are saved to the file,\u00a0<code>entr<\/code> launches <code>wc<\/code> . To stop <code>entr<\/code>, hit <code>q<\/code>, or <code>Ctrl+c<\/code> .<\/p>\n<p><strong>RELATED:<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.howtogeek.com\/435903\/what-are-stdin-stdout-and-stderr-on-linux\/\"><strong><em>What Are stdin, stdout, and stderr on Linux?<\/em><\/strong><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Practical_Uses\"><\/span>Practical Uses<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Now that we\u2019ve seen <code>entr<\/code> in action and you understand the principle, let\u2019s look at some more useful scenarios.<\/p>\n<p>We\u2019ll make\u00a0<code>entr<\/code> monitor the files in the current directory. If any of the files are modified, we want <code>entr<\/code>\u00a0to launch <code>make<\/code> for us to rebuild our project. We\u2019ll chain another command, <code>make test<\/code>, to run some tests on the new build. The AND operator <code>&amp;&amp;<\/code> will only launch the second command if the first completes without any issues.<\/p>\n<p>The <code>-s<\/code> (shell) option makes sure that the interpreter used is the one defined in the SHELL environment variable. This ensures\u00a0<code>entr<\/code> receives the exit code from the first <code>make<\/code> command.<\/p>\n<pre>ls | entr -s 'make &amp;&amp; make test'<\/pre>\n<p>Using the <code>ls<\/code> command to send the list of all filenames in the directory to <code>entr<\/code> is a bit clunky. You might have files in the directory that are part of the project but are not actually build files. Perhaps they are design notes or a to-do list. You don\u2019t need to have your project rebuilt every time you change one of those non-code files.<\/p>\n<p>We can refine the command so that it monitors only the appropriate source code files.\u00a0This command monitors the C source code and header files.<\/p>\n<pre>ls *.[ch] | entr -s 'make &amp;&amp; make test'<\/pre>\n<p>Of course, we\u2019re not limited to launching <code>make<\/code>. You might have a custom build script that you\u2019d prefer to use.<\/p>\n<pre>ls *.[ch] | entr script.sh<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Leveraging_Git\"><\/span>Leveraging Git<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The <code>entr<\/code> command isn\u2019t Git-ware, but we can still <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/git-scm.com\/\">use some of Git\u2019s capabilities<\/a> to smooth our workflow.<\/p>\n<p>The <code>git ls-file<\/code> command will list the files that are in Git\u2019s index and working source tree, taking into account the exceptions that have been defined in your \u201c.gitignore\u201d file. That\u2019s a ready-made list of the files that we\u2019re interested in, so let\u2019s use that as the source of the files to monitor.<\/p>\n<pre>git ls-files | entr script.sh<\/pre>\n<p>The <code>ls-files<\/code> command accepts command-line options. These can be used to further filter or augment the files list returned by Git:<\/p>\n<ul>\n<li><strong>-c<\/strong>: Show cached files.<\/li>\n<li><strong>-d<\/strong>: Show deleted files.<\/li>\n<li><strong>-m<\/strong>: Show modified files.<\/li>\n<li><strong>-o<\/strong>: Show untracked files.<\/li>\n<\/ul>\n<p>The <code>--exclude-standard<\/code> option is a shorthand way to tell Git to ignore files that match the entries in the \u201c.git\/info\/exclude\u201d, local \u201c.gitignore\u201d, and global \u201c.gitignore\u201d files.<\/p>\n<pre>git ls-files -cdmo --exclude-standard | entr 'make &amp;&amp; make test'<\/pre>\n<p>That\u2019ll catch a lot of eventualities, but it won\u2019t cope with a new file being created. And the new file won\u2019t be in Git. We can still cope with that situation, using a little bit of Bash scripting and a feature of <code>entr<\/code>.<\/p>\n<p>The <code>-d<\/code> (directory) option causes <code>entr<\/code> to monitor the files in a directory and to exit if a new file is added. By wrapping our <code>entr<\/code> command in a <code>while\/do<\/code> loop, the entire <code>entr<\/code> command line will be automatically restarted, and the new file will be picked up and acted upon. Files and directories whose names start with a period \u201c<code>.<\/code>\u201d are ignored.<\/p>\n<pre>while true; do&#13;\n&#13;\n  { git ls-files; git ls-files . --exclude-standard --others; } | entr -d .\/script.sh&#13;\n&#13;\ndone<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Restarting_Servers_and_Interpreters\"><\/span>Restarting Servers and Interpreters<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Perhaps you work with an <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Interpreted_language\">interpreted language<\/a> like <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Ruby_(programming_language)\">Ruby<\/a>. Each time your program file is changed, you need to stop and restart the Ruby interpreter. You can handle these types of use cases with the <code>-r<\/code> (restart) option.<\/p>\n<p>To monitor a program file called \u201chello_world.rb\u201d, and to stop and restart the Ruby interpreter each time the program file changes, use this command:<\/p>\n<pre>ls hello_world.rb | entr -r ruby hello_world.rb<\/pre>\n<p>Each time the program file is edited and saved, the Ruby interpreter is restarted and the program reloaded.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6035\" data-pagespeed-lazy-src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/10fb15c7.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"646\" height=\"237\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>The program initially contained:<\/p>\n<pre>puts \"Hello, World!\"<\/pre>\n<p>It was edited to say:<\/p>\n<pre>puts \"Hello, CloudSavvyIT!\"<\/pre>\n<p>When this was saved,\u00a0<code>entr<\/code> restarted the Ruby interpreter, and reloaded the program.<\/p>\n<p>The file was edited once more to add the word \u201creaders\u201d and saved to the hard drive.<\/p>\n<pre>puts \"Hello, CloudSavvyIT readers!\"<\/pre>\n<p>You can see the three outputs in the screenshot. If you press the <code>spacebar<\/code>, <code>entr<\/code> will restart the command whether you\u2019ve changed the program file or not.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Not_Just_for_Programmers\"><\/span>Not Just for Programmers<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Because the command launched by <code>entr<\/code> can be anything, including shell scripts, the scope for using <code>entr<\/code> to automate processes is virtually limitless.<\/p>\n<p>Perhaps you have a directory that has files dropped into it by <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/sftp.1.html\">secure FTP<\/a>, or <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/rsync.1.html\">rsync<\/a>, or <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/curl.1.html\">curl<\/a>. You could have these files automatically copied somewhere else, or compressed, or searched by <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/grep.1.html\">grep<\/a> for the word \u201cerror\u201d.<\/p>\n<p>This makes it a great tool for system administrators and developers alike.\n<\/p><\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.cloudsavvyit.com\/5736\/how-to-run-a-linux-command-when-a-file-set-changes\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;#How to Run a Linux Command When a File Set Changes \u2013 CloudSavvy IT&#8221; Gecko Studio\/Shutterstock.com Learn how to run Linux commands when any file in a watched set of files changes, and when new files are created. We show you how to use this flexible tool. The entr Command You can set commands\u00a0to run&#8230;<\/p>\n","protected":false},"author":1,"featured_media":291068,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/54fd2e32.png","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-291067","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/291067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=291067"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/291067\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/291068"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=291067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=291067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=291067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}