CINXE.COM

シェルの人気記事 470件 - はてなブックマーク

<!DOCTYPE html> <html lang="ja" data-page-scope="EntrySearch" data-stable-request-url="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-device-type="PC" data-sentry-environment="production" data-sentry-sample-rate="0.1" data-entry-search-query="シェル" data-page-subtype="entrysearch" data-page-type="entrysearch" > <head> <!-- Google Tag Manager --> <script> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5TDHQX'); </script> <!-- End Google Tag Manager --> <meta charset="UTF-8"> <title>シェルの人気記事 470件 - はてなブックマーク</title> <script src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/js/v4/bookmark.js" async></script> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/css/v4/pikaday.css" /> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/css/v4/triangle.css" /> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/css/v4/bookmark.css" /> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/css/v4/bookmark.star.css" /> <link rel="canonical" href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB" /> <link rel="next" href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?users=3&amp;date_range=5y&amp;safe=on&amp;sort=popular&amp;target=tag&amp;page=2"> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> <meta name="viewport" content="width=device-width"> <link rel="search" type="application/opensearchdescription+xml" title="はてなブックマーク検索" href="/opensearch.xml" /> <link rel="apple-touch-icon-precomposed" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/apple-touch-icon-precomposed.png" /> <link rel="mask-icon" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/safari-pinned-tab-icon.svg" color="#00A4DE" /> <meta name="msapplication-navbutton-color" content="#2C6EBD" /> <meta name="msapplication-task" content="name=はてなブックマーク; action-uri=/; icon-uri=https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/icons/bookmark.ico" /> <meta name="msapplication-task" content="name=マイブックマーク; action-uri=/my; icon-uri=https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/icons/my-bookmark.ico" /> <meta name="msapplication-task" content="name=お気に入りのブックマーク; action-uri=/my/favorite; icon-uri=https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/icons/favorite-bookmark.ico" /> <meta name="msapplication-task" content="name=人気エントリー; action-uri=/hotentry; icon-uri=https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/icons/hotentry.ico" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="referrer" content="origin"> <link rel="alternate" type="application/rss+xml" href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?sort=popular&amp;target=tag&amp;safe=on&amp;mode=rss&amp;users=3&amp;date_range=5y" /> <script> function isMobile() { const html = document.documentElement; const deviceType = html.dataset.deviceType || ''; if (deviceType.length > 0) { return deviceType === 'MOBILE'; } else { const maxMobileWidth = 480; const windowWidth = window.innerWidth; return maxMobileWidth >= windowWidth; } } </script> </head> <body class="page-centerarticle page-entrysearch fixed-header"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5TDHQX" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div class="link-app-banner js-dynamic-link-app-banner is-hidden"> <button class="link-app-banner-btn-close js-dynamic-link-app-banner-close-button"><span>close</span></button> <a class="link-app-banner-btn" href="https://hatenabookmark.page.link/app"> <div class="link-app-banner-btn-detail"> <div class="link-app-banner-icon"><img src="/images/v4/public/app/ic-ios.svg" alt="はてなブックマークアプリ"></div> <p class="link-app-banner-text">サクサク読めて、<br class="link-app-banner-text-newline">アプリ限定の機能も多数!</p> </div> <div class="link-app-banner-btn-open">アプリで開く</div> </a> </div> <header id="global-header" data-portal-static-origin="//cdn.www.st-hatena.com"> <div id="header" class="global-header-inner js-global-header-inner"> <h2 id="gh-logo"><a href="/" data-gtm-label="gh-blogo"><span>はてなブックマーク</span></a></h2> <div class="is-guest js-guest is-hidden"> <input id="gh-search-icon-check" type="checkbox" checked="checked" /> <label class="gh-search-icon" for="gh-search-icon-check" aria-label="検索を閉じる"><span>閉じる</span></label> <form class="gh-searchbox" method="get" action="/search_dwim" role="search"> <input value="" name="q" type="search" class="gh-inputtext" placeholder="キーワード・URLを検索" size="40" /> <input value="" type="submit" class="gh-search-button" /> </form> <ul class="gh-service-menu"> <li><a href="/guide" data-gtm-label="gh-guest-guide">はてなブックマークって?</a></li> <li><a href="/guide/tools" data-gtm-label="gh-guest-tools">アプリ・拡張の紹介</a></li> <li><a href="https://www.hatena.ne.jp/register?location=https%3A%2F%2Fb.hatena.ne.jp%2F%3Fregistered_from%3Dglobal-header&amp;via=201037" class="gh-guest-register" data-gtm-label="gh-guest-register">ユーザー登録</a></li> <li><a href="https://www.hatena.ne.jp/login?location=https%3A%2F%2Fb.hatena.ne.jp%2Fq%2F%25E3%2582%25B7%25E3%2582%25A7%25E3%2583%25AB" rel="nofollow" class="gh-guest-login" data-gtm-label="gh-guest-login">ログイン</a></li> <li class="gh-hatena-logo"><a href="http://www.hatena.ne.jp/"><img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/logo/logo-global-white.svg" alt="Hatena" width="74px" height="13px"/></a></li> </ul> </div> <noscript> <ul class="gh-service-menu"> <li><a href="https://www.hatena.ne.jp/logout?location=https%3A%2F%2Fb.hatena.ne.jp%2F">ログアウト</a></li> </ul> </noscript> <script type="text/x-template" id="template-menu-hatena-user"> <form class="gh-searchbox" method="get" action="/search_dwim" role="search"> <input value="" name="q" type="search" class="gh-inputtext" placeholder="キーワード・URLを検索" size="40" /> <input value="" type="submit" class="gh-search-button" /> </form> <ul class="gh-service-menu"> <li><a class="hotentry" data-gtm-label="gh-mypage" href="{{hotentry_url}}"><img src="{{user_image_url}}" class="header-profile-icon" width="16" height="16" alt="{{username}}" /></a><a class="hotentry" data-gtm-label="gh-mypage" href="{{hotentry_url}}">マイページ</a></li> <li><a class="bookmark" data-gtm-label="gh-bookmark" href="{{bookmark_url}}">ブックマーク</a></li> <li><a class="unread_bookmark" data-gtm-label="gh-ril" href="{{bookmark_stock_url}}">あとで読む</a></li> <li><a class="add" data-gtm-label="gh-add" href="{{add_bookmark_url}}">追加</a></li> <li><a class="tools" data-gtm-label="gh-tools" href="/guide/tools">ツール</a></li> <li><a class="config" data-gtm-label="gh-config" href="/-/my/config/profile">設定</a></li> <li><a class="feedback" data-gtm-label="gh-feedback" href="/-/feedback/hatena_bookmark" target="_blank">フィードバック</a></li> <li id="header-username" class="gh-dropdown-services" data-gtm-label="gh-services" title="利用中のサービス" data-name="{{username}}"> <span class="header-dropdown gh-dropdown" tabindex="0"> <img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/usermenu-wh.svg" alt="利用中のサービス" width="24" height="24" /> </span> <dl class="header-window" id="username-window"></dl> </li> <li id="header-notify" data-gtm-label="gh-notify" class="gh-dropdown-notify" title="あなたへのお知らせ"> <span class="header-dropdown gh-dropdown" tabindex="0"> <img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/notify-wh.svg" alt="あなたへのお知らせ" width="25" height="25" /> <span class="notify-count"></span> </span> <div id="notify-window" class="header-window header-notify"></div> </li> <li class="gh-hatena-logo"><a href="http://www.hatena.ne.jp/"><img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/logo/logo-global-white.svg" alt="Hatena" width="74px" height="13px"/></a></li> </ul> </script> </div> </header> <div id="info-header"><div id="info-header-message"></div><span></span></div> <div class="global-notification is-hidden js-global-notification"></div> <div id="container"> <div class="entrysearch-searchbox"> <form class="entrysearch-searchbox-body js-entrysearch-form" method="get"> <input value="シェル" type="text" class="entrysearch-searchbox-textInput js-entrysearch-form-text-input" size="40" aria-label="検索キーワードを入力"> <input value="tag" name="target" type="hidden"> <input value="popular" name="sort" type="hidden"> <input value="3" name="users" type="hidden"> <input value="on" name="safe" type="hidden"> <input value="検索" type="submit" class="entrysearch-searchbox-btn js-entrysearch-form-button" aria-label="検索"> </form> </div> <div class="centerarticle-wrapper"> <div class="left-container"> <div class="centerarticle-sidebar-menu"> <h3 class="centerarticle-aside-title">検索対象</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?date_range=5y&amp;users=3&amp;safe=on&amp;sort=popular&amp;target=all" >すべて</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?date_range=5y&amp;users=3&amp;safe=on&amp;target=tag&amp;sort=popular" class="is-current">タグ</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?target=title&amp;sort=popular&amp;safe=on&amp;users=3&amp;date_range=5y" >タイトル</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?date_range=5y&amp;users=3&amp;safe=on&amp;sort=popular&amp;target=text" >本文</a></li> </ul> </div> <div class="centerarticle-sidebar-menu"> <h3 class="centerarticle-aside-title">並び順</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?target=tag&amp;sort=recent&amp;safe=on&amp;users=3&amp;date_range=5y" >新着</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?sort=popular&amp;target=tag&amp;safe=on&amp;date_range=5y&amp;users=3" class="is-current">人気</a></li> </ul> </div> <div class="centerarticle-sidebar-menu"> <h3 class="centerarticle-aside-title">ブックマーク数</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?target=tag&amp;sort=popular&amp;safe=on&amp;date_range=5y&amp;users=1" >1 user</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?date_range=5y&amp;users=3&amp;safe=on&amp;sort=popular&amp;target=tag" class="is-current">3 users</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?date_range=5y&amp;users=50&amp;safe=on&amp;sort=popular&amp;target=tag" >50 users</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?safe=on&amp;sort=popular&amp;target=tag&amp;users=100&amp;date_range=5y" >100 users</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?date_range=5y&amp;users=500&amp;safe=on&amp;sort=popular&amp;target=tag" >500 users</a></li> </ul> </div> <div class="centerarticle-sidebar-menu js-safe-search-div is-hidden" title="セーフサーチはログイン時にのみoffにできます"> <h3 class="centerarticle-aside-title">セーフサーチ</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?date_range=5y&amp;users=3&amp;safe=on&amp;target=tag&amp;sort=popular" class="is-current">オン</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?sort=popular&amp;target=tag&amp;safe=off&amp;users=3&amp;date_range=5y" >オフ</a></li> </ul> </div> <div class="centerarticle-sidebar-menu js-entrysearch-date"> <h3 class="centerarticle-aside-title">期間指定</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?safe=on&amp;sort=popular&amp;target=tag&amp;users=3&amp;date_range=all" >すべて</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?safe=on&amp;sort=popular&amp;target=tag&amp;users=3&amp;date_range=w" >1週間</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?safe=on&amp;sort=popular&amp;target=tag&amp;date_range=m&amp;users=3" >1ヶ月</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?target=tag&amp;sort=popular&amp;safe=on&amp;users=3&amp;date_range=y" >1年</a></li> </ul> <form method="get" class="js-entrysearch-datepicker-form"> <input value="シェル" class="js-entrysearch-form-text-input" type="hidden"> <input value="tag" name="target" type="hidden"> <input value="popular" name="sort" type="hidden"> <input value="3" name="users" type="hidden"> <input value="on" name="safe" type="hidden"> <ul class="centerarticle-sub-navi"> <li><input class="js-entrysearch-datepicker-start entrysearch-searchbox-dateInput" value="" type="text" name="date_begin"> から</li> <li><input class="js-entrysearch-datepicker-end entrysearch-searchbox-dateInput" value="" type="text" name="date_end"> まで</li> <li><input value="検索" type="submit" class="entrysearch-searchbox-btn js-entrysearch-form-button"><li> </ul> </form> </div> </div> <div class="entrysearch-bar"> <p class="entrysearch-bar-results">1 - 40 件 / 470件</p> <div class="entrysearch-bar-inner"> <button class="entrysearch-filter-btn js-entrysearch-filter-btn">絞り込み</button> <a class="entrysearch-sort-btn" href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?users=3&amp;date_range=5y&amp;target=tag&amp;sort=popular&amp;safe=on">新着順</a> <a class="entrysearch-sort-btn is-current" href="/q/%E3%82%B7%E3%82%A7%E3%83%AB?safe=on&amp;sort=recent&amp;target=tag&amp;date_range=5y&amp;users=3">人気順</a> </div> </div> <div class="entrysearch-filter js-entrysearch-filter is-hidden"> <div class="entrysearch-filter-header"> <h2 class="entrysearch-filter-title">絞り込み</h2> <button class="entrysearch-filter-close js-entrysearch-filter-close"></button> </div> <ul class="entrysearch-filter-list"> <li class="entrysearch-filter-item js-entrysearch-target-dropdown"> <h3 class="entrysearch-filter-item-head">検索対象</h3> <div class="entrysearch-filter-item-value-wrapper"> <select class="entrysearch-filter-item-value js-entrysearch-filter-target"> <option value="all" >すべて</option> <option value="tag" selected>タグ</option> <option value="title" >タイトル</option> <option value="text" >本文</option> </select> </div> </li> <li class="entrysearch-filter-item"> <h3 class="entrysearch-filter-item-head">ブックマーク数</h3> <div class="entrysearch-filter-item-value-wrapper"> <select class="entrysearch-filter-item-value js-entrysearch-filter-users"> <option value="1" >1 user</option> <option value="3" selected>3 users</option> <option value="50" >50 users</option> <option value="100" >100 users</option> <option value="500" >500 users</option> </select> </div> </li> <li class="entrysearch-filter-item"> <h3 class="entrysearch-filter-item-head">期間</h3> <div class="entrysearch-filter-item-value-wrapper"> <select class="entrysearch-filter-item-value js-entrysearch-filter-daterange"> <option value="all">すべて</option> <option value="w" >1週間</option> <option value="m" >1ヶ月</option> <option value="y" >1年</option> </select> </div> </li> <li class="entrysearch-filter-item js-safe-search-div is-hidden"> <h3 class="entrysearch-filter-item-head">セーフサーチ</h3> <div class="entrysearch-filter-checkbox"> <input type="checkbox" name="safesearch" id="safesearch" class="js-entryseach-safesearch" checked> <label class="entrysearch-filter-checkbox-label" for="safesearch"></label> </div> </li> </ul> <div class="entrysearch-filter-footer"> <button class="entrysearch-filter-search-btn styleguide-btn-primary js-entrysearch-filter-search-btn">検索する</button> <button class="entrysearch-filter-clear-btn styleguide-btn-text js-entrysearch-filter-clear-btn">条件をクリアする</button> </div> </div> <div class="search-container"> <h2 class="entrysearch-title"> <span class="entrysearch-word">シェルの検索結果</span><span class="entrysearch-result">1 - 40 件 / 470件</span> </h2> <div class="entrysearch-summary-text"> <span>シェル</span>に関するエントリは<span>470</span>件あります。 <span>linux</span>、 <span>shell</span>、 <span>コマンド</span> などが関連タグです。 人気エントリには <span>『MySQLでプライマリキーをUUIDにする前に知っておいて欲しいこと | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ]』</span>などがあります。 </div> <div class="entrysearch-related-entries" data-gtm-inview-label="entry-search-recommend-header"> <h3 class="entrysearch-related-title">シェルの関連エントリー</h3> <ul class="entrysearch-related-list"> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://kiririmode.hatenablog.jp/entry/20220430/1651309058" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/c873bb1cb91d0416afdbfd977f67af46a12e4153/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fk%2Fkiririmode%2F20180429%2F20180429192343.jpg" alt="なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://kiririmode.hatenablog.jp/entry/20220430/1651309058" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記 </a> </h4> <a href="/entry/s/kiririmode.hatenablog.jp/entry/20220430/1651309058" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 921 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://blog.magnolia.tech/entry/2023/01/21/211338" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/b354fd32ef17d4697a2d3a7b21f42e9a6e947334/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F2a0a3e40a74e57ae13c571922191de3f7235f674%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fm.media-amazon.com%252Fimages%252FI%252F412-gGfebPL._SL500_.jpg" alt="『マスタリングLinuxシェルスクリプト 第2版』、こういう1冊手元に有るとずっと使える本はちゃんと買っておきたいですね - Magnolia Tech"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://blog.magnolia.tech/entry/2023/01/21/211338" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> 『マスタリングLinuxシェルスクリプト 第2版』、こういう1冊手元に有るとずっと使える本はちゃんと買っておきたいですね - Magnolia Tech </a> </h4> <a href="/entry/s/blog.magnolia.tech/entry/2023/01/21/211338" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 498 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://rheb.hatenablog.com/entry/setpriv" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/c7b9cf0345629ad3f7ff76aba0fb6f27719db7b8/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F10257846132643728507%2F4207112889920192847%2F1664267503" alt="systemd serviceから呼ぶシェルではsudoではなくsetprivを使う - 赤帽エンジニアブログ"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://rheb.hatenablog.com/entry/setpriv" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> systemd serviceから呼ぶシェルではsudoではなくsetprivを使う - 赤帽エンジニアブログ </a> </h4> <a href="/entry/s/rheb.hatenablog.com/entry/setpriv" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 375 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://techblog.asahi-net.co.jp/entry/2023/10/11/151441" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/255170ad2f01fbf2b074cdef567861d4ef1f832a/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F17391345971651953416%2F4207575160648261808%2F1697434546" alt="シェルスクリプトとの対比で理解するPythonのsubprocess - 朝日ネット 技術者ブログ"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://techblog.asahi-net.co.jp/entry/2023/10/11/151441" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> シェルスクリプトとの対比で理解するPythonのsubprocess - 朝日ネット 技術者ブログ </a> </h4> <a href="/entry/s/techblog.asahi-net.co.jp/entry/2023/10/11/151441" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 341 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://engineers.ntt.com/entry/2022/12/04/071122" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/fb6053cf3e1c36caa3c5650244c5f1f0477be317/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F26006613764871753%2F4207112889940620685%2F1670380785" alt="シェル・ワンライナー 160 本ノックを完走した - NTT Communications Engineers&#39; Blog"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://engineers.ntt.com/entry/2022/12/04/071122" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> シェル・ワンライナー 160 本ノックを完走した - NTT Communications Engineers&#39; Blog </a> </h4> <a href="/entry/s/engineers.ntt.com/entry/2022/12/04/071122" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 280 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://msksgm.hatenablog.com/entry/2023/02/12/110713" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/eeb3dfa475fc3d031f348dcf2c11b40efa376d87/height=288;version=1;width=512/https%3A%2F%2Fm.media-amazon.com%2Fimages%2FI%2F412-gGfebPL._SL500_.jpg" alt="「マスタリング Linux シェルスクリプト第 2 版」感想 - msksgm’s blog"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://msksgm.hatenablog.com/entry/2023/02/12/110713" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> 「マスタリング Linux シェルスクリプト第 2 版」感想 - msksgm’s blog </a> </h4> <a href="/entry/s/msksgm.hatenablog.com/entry/2023/02/12/110713" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 185 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://moznion.hatenadiary.com/entry/2022/01/02/120903" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/eba0c915c754411567993135ef91909b89587466/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F11696248318755846778%2F13574176438048599419%2F1641123769" alt="実行中のシェルスクリプトをchattr(1)を使ってimmutableにするというのはどうか - その手の平は尻もつかめるさ"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://moznion.hatenadiary.com/entry/2022/01/02/120903" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> 実行中のシェルスクリプトをchattr(1)を使ってimmutableにするというのはどうか - その手の平は尻もつかめるさ </a> </h4> <a href="/entry/s/moznion.hatenadiary.com/entry/2022/01/02/120903" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 110 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://mrwk.hateblo.jp/entry/2021/12/30/145427" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/792276431c4f0caa4390191df678607a0ee630cf/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fm%2Fmrwk%2F20211230%2F20211230113629.png" alt="ファイルの編集と置き換えの違い または シェルスクリプトの安全な置き換え - mrwk update"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://mrwk.hateblo.jp/entry/2021/12/30/145427" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> ファイルの編集と置き換えの違い または シェルスクリプトの安全な置き換え - mrwk update </a> </h4> <a href="/entry/s/mrwk.hateblo.jp/entry/2021/12/30/145427" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 70 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://syu-m-5151.hatenablog.com/entry/2021/07/05/103447" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/46327bc598b7349fecb1b9696a511ae7131bccf1/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F8454420450094081900%2F26006613783385754%2F1625558729" alt="Go言語のCLI作成ツールであるcobra のシェル補完の生成があまりにも簡単 - じゃあ、おうちで学べる"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://syu-m-5151.hatenablog.com/entry/2021/07/05/103447" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> Go言語のCLI作成ツールであるcobra のシェル補完の生成があまりにも簡単 - じゃあ、おうちで学べる </a> </h4> <a href="/entry/s/syu-m-5151.hatenablog.com/entry/2021/07/05/103447" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 57 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://this.aereal.org/entry/2021/09/16/202911" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/9a227b720fe7b2908058e7b96727e14e1cf63d67/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F13208692334729888395%2F13574176438012394998%2F1631851288" alt="生きているのならシェルスクリプトにだってなってみせる、そうPerlならね - Sexually Knowing"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://this.aereal.org/entry/2021/09/16/202911" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-c-title"> 生きているのならシェルスクリプトにだってなってみせる、そうPerlならね - Sexually Knowing </a> </h4> <a href="/entry/s/this.aereal.org/entry/2021/09/16/202911" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-c-users"> 56 users </a> </div> </li> </ul> </div> <ul class="entrysearch-articles"> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://techblog.raccoon.ne.jp/archives/1627262796.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://techblog.raccoon.ne.jp/archives/1627262796.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Ftechblog.raccoon.ne.jp%2Farchives%2F1627262796.html" alt="">MySQLでプライマリキーをUUIDにする前に知っておいて欲しいこと | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ] </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/techblog.raccoon.ne.jp/archives/1627262796.html" class="js-keyboard-entry-page-openable" title="MySQLでプライマリキーをUUIDにする前に知っておいて欲しいこと | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ] (1035 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 1035 users </a> </span> </li> <li> <a href="/site/techblog.raccoon.ne.jp/" title="『techblog.raccoon.ne.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> techblog.raccoon.ne.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/07/26</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">株式会社ラクーンホールディングスのエンジニア/デザイナーから技術情報をはじめ、世の中のためになることや社内のことなどを発信してます。 bashパフォーマンスMySQLInnoDBDB設計インデックス こんにちは、羽山です。 今回は MySQL のプライマリキーに UUID を採用する場合に起きるパフォーマンスの問題を仕組みから解説します。 MySQL(InnoDB) &amp; UUID のパフォーマンスについては各所でさんざん議論・検証されていますが、論理的に解説した記事が少なかったり一部には誤解を招くようなものもあるため、しっかりと理由から理解するための情報として役立つことができればと思っています。 UUID と比較される古き良き昇順/降順のプライマリキーはというと、 MySQL の InnoDB において良いパフォーマンスを出すために縁の下の力持ちのような働きをしてくれているケースが実は少な</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/mysql" data-gtm-click-label="entry-search-result-item-tag">mysql</a></li> <li><a href="/q/uuid" data-gtm-click-label="entry-search-result-item-tag">uuid</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/db" data-gtm-click-label="entry-search-result-item-tag">db</a></li> <li><a href="/q/%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">パフォーマンス</a></li> <li><a href="/q/performance" data-gtm-click-label="entry-search-result-item-tag">performance</a></li> <li><a href="/q/database" data-gtm-click-label="entry-search-result-item-tag">database</a></li> <li><a href="/q/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">データベース</a></li> <li><a href="/q/sql" data-gtm-click-label="entry-search-result-item-tag">sql</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://techblog.raccoon.ne.jp/archives/1627262796.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://techblog.raccoon.ne.jp/archives/1627262796.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/5e9d48c3c6f38c2d5f71897d98efcb251289d1f9/height=288;version=1;width=512/https%3A%2F%2Ftechblog.raccoon.ne.jp%2Fwp-content%2Fuploads%2F2021%2F07%2Fboard-755792_800.jpg" alt="MySQLでプライマリキーをUUIDにする前に知っておいて欲しいこと | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ]" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/ulwlu/articles/1c3a1da12887ed"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/ulwlu/articles/1c3a1da12887ed" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fulwlu%2Farticles%2F1c3a1da12887ed" alt="">Mac を買ったら必ずやっておきたい初期設定を、全て自動化してみた </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/ulwlu/articles/1c3a1da12887ed" class="js-keyboard-entry-page-openable" title="Mac を買ったら必ずやっておきたい初期設定を、全て自動化してみた (1008 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 1008 users </a> </span> </li> <li> <a href="/site/zenn.dev/" title="『zenn.dev』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/12/02</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">成果物 https://github.com/ulwlu/dotfiles/blob/master/system/macos.sh このスクリプトに全ての設定と、設定可能なオプションをコメントで記載しています。誰でもこのスクリプトのコメントを外したり任意の値を入れる事で使用可能です。 世界中のいくつかのdotfilesにはmacos.shが存在し、ある程度のMacOSの設定自動化を実現しています。しかし何百と見た中で、全設定と設定可能なオプションを全て網羅して記載しているのは恐らく初です。 これらの設定は破壊的なものではなく、いつかアプデによりキーが有効でなくなっても壊れる事はありません。壊れるのは~/ApplicationSupport/Dockディレクトリ配下のファイルを移動したり、sqlite群に無効な値をいれた時のみです(後述)。 この記事は何か dotfiles Advent C</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/mac" data-gtm-click-label="entry-search-result-item-tag">mac</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E8%A8%AD%E5%AE%9A" data-gtm-click-label="entry-search-result-item-tag">設定</a></li> <li><a href="/q/dotfiles" data-gtm-click-label="entry-search-result-item-tag">dotfiles</a></li> <li><a href="/q/apple" data-gtm-click-label="entry-search-result-item-tag">apple</a></li> <li><a href="/q/macOS" data-gtm-click-label="entry-search-result-item-tag">macOS</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/AppleScript" data-gtm-click-label="entry-search-result-item-tag">AppleScript</a></li> <li><a href="/q/tips" data-gtm-click-label="entry-search-result-item-tag">tips</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/ulwlu/articles/1c3a1da12887ed"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/ulwlu/articles/1c3a1da12887ed" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/2c9807eea2d62231c60b8740dc573b8f4046ccc0/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fdlhzyuewr%2Fimage%2Fupload%2Fs--QCVQiODk--%2Fc_fit%252Cco_rgb%3A111%252Cl_text%3Anotosansjp-medium.otf_50_bold%3AMac%252520%2525E3%252582%252592%2525E8%2525B2%2525B7%2525E3%252581%2525A3%2525E3%252581%25259F%2525E3%252582%252589%2525E5%2525BF%252585%2525E3%252581%25259A%2525E3%252582%252584%2525E3%252581%2525A3%2525E3%252581%2525A6%2525E3%252581%25258A%2525E3%252581%25258D%2525E3%252581%25259F%2525E3%252581%252584%2525E5%252588%25259D%2525E6%25259C%25259F%2525E8%2525A8%2525AD%2525E5%2525AE%25259A%2525E3%252582%252592%2525E3%252580%252581%2525E5%252585%2525A8%2525E3%252581%2525A6%2525E8%252587%2525AA%2525E5%25258B%252595%2525E5%25258C%252596%2525E3%252581%252597%2525E3%252581%2525A6%2525E3%252581%2525BF%2525E3%252581%25259F%252Cw_780%2Fco_rgb%3A93a5b1%252Cg_south_east%252Cl_text%3Anotosansjp-medium.otf_34_bold%3ABy%252520%252540ulwlu%252Cx_280%252Cy_63%2Fv1579262216%2Fogp-base_mrsu7s.png" alt="Mac を買ったら必ずやっておきたい初期設定を、全て自動化してみた" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.publickey1.jp/blog/22/itit202210.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.publickey1.jp/blog/22/itit202210.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.publickey1.jp%2Fblog%2F22%2Fitit202210.html" alt="">ITエンジニアが投票した「ITエンジニア本大賞2022」ベスト10発表。「シェル・ワンライナー160本ノック」「モノリスからマイクロサービスへ」「恐れのない組織」など </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.publickey1.jp/blog/22/itit202210.html" class="js-keyboard-entry-page-openable" title="ITエンジニアが投票した「ITエンジニア本大賞2022」ベスト10発表。「シェル・ワンライナー160本ノック」「モノリスからマイクロサービスへ」「恐れのない組織」など (941 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 941 users </a> </span> </li> <li> <a href="/site/www.publickey1.jp/" title="『www.publickey1.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.publickey1.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/01/18</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">ITエンジニアが投票した「ITエンジニア本大賞2022」ベスト10発表。「シェル・ワンライナー160本ノック」「モノリスからマイクロサービスへ」「恐れのない組織」など 「ITエンジニア本大賞」は、仕事の役に立った本、初学者におすすめの本、ずっと手元に置いておきたい本など、おすすめの本をITエンジニアがWeb投票で選ぶイベントです。 主催は翔泳社ですが、対象となる書籍は出版社を問わず技術書、ビジネス書全般となっています。刊行年も関係なく、これまで大賞に選出された書籍を除き、この1年を振り返っておすすめしたい書籍が対象となります。 今回発表されたのは技術書部門とビジネス書部門それぞれのベスト10です。現時点では50音順に並んでいます。 このなかから特に投票の多かった技術書3冊、ビジネス書3冊について、同社が2月17日と18日に開催する「Developers Summit 2021(デブサミ20</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E6%9C%AC" data-gtm-click-label="entry-search-result-item-tag">本</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2" data-gtm-click-label="entry-search-result-item-tag">エンジニア</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> <li><a href="/q/book" data-gtm-click-label="entry-search-result-item-tag">book</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">プロジェクト</a></li> <li><a href="/q/%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">ビジネス</a></li> <li><a href="/q/IT" data-gtm-click-label="entry-search-result-item-tag">IT</a></li> <li><a href="/q/%E3%82%B5%E3%83%BC%E3%83%90" data-gtm-click-label="entry-search-result-item-tag">サーバ</a></li> <li><a href="/q/%E6%9B%B8%E7%B1%8D" data-gtm-click-label="entry-search-result-item-tag">書籍</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.publickey1.jp/blog/22/itit202210.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.publickey1.jp/blog/22/itit202210.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/56a32f2c632ea749f4f10e5aa22e5928cbecf18b/height=288;version=1;width=512/https%3A%2F%2Fwww.publickey1.jp%2F2022%2Fenginieerbooks2022awd.gif" alt="ITエンジニアが投票した「ITエンジニア本大賞2022」ベスト10発表。「シェル・ワンライナー160本ノック」「モノリスからマイクロサービスへ」「恐れのない組織」など" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://kiririmode.hatenablog.jp/entry/20220430/1651309058"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://kiririmode.hatenablog.jp/entry/20220430/1651309058" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fkiririmode.hatenablog.jp%2Fentry%2F20220430%2F1651309058" alt="">なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/kiririmode.hatenablog.jp/entry/20220430/1651309058" class="js-keyboard-entry-page-openable" title="なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記 (921 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 921 users </a> </span> </li> <li> <a href="/site/kiririmode.hatenablog.jp/" title="『kiririmode.hatenablog.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> kiririmode.hatenablog.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/05/01</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">会社の中でシェルスクリプトについての話をすることにしたので、このエントリはそのためのものです。 個人的な好みとかもいろいろ入ってしまっているので、そのあたりは取捨選択してください。 なぜ今シェルスクリプトを学ぶのか 公開されているSRE本をマルっとPDF化する SpotBugsのViolationレポートをMerge Requestのコメント投稿する ぼくの互換性についての考え方 何で書くか シェルスクリプトをうまく書くには ShellCheckを使う バッドパターンとその修正 line-by-lineの処理が多い lsを使う ls /directory | grep mystring ls | grep -v &#39;log$&#39; lsの結果をループさせる 良いシェルスクリプトを書くためのTIPS set -euする 文字列は基本的にクオートする 局所変数にはlocalを使う 定数は読み取り専用</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/shellscript" data-gtm-click-label="entry-search-result-item-tag">shellscript</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/tips" data-gtm-click-label="entry-search-result-item-tag">tips</a></li> <li><a href="/q/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">スクリプト</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://kiririmode.hatenablog.jp/entry/20220430/1651309058"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://kiririmode.hatenablog.jp/entry/20220430/1651309058" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/c873bb1cb91d0416afdbfd977f67af46a12e4153/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fk%2Fkiririmode%2F20180429%2F20180429192343.jpg" alt="なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <div class="related-entry-wrapper"> <div class="entrysearch-related-entries" data-gtm-inview-label="entry-search-recommend-middle"> <h3 class="entrysearch-related-title">シェルの関連エントリー</h3> <ul class="entrysearch-related-list"> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://speakerdeck.com/iwamot/cline-so-convenient-money-flies" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/99cc8092d3793003c1837ffcb79ba393223d290a/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F5539be22d91e468083a8d5637474e689%2Fslide_0.jpg%3F34444836" alt="Cline、めっちゃ便利、お金が飛ぶ💸"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://speakerdeck.com/iwamot/cline-so-convenient-money-flies" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> Cline、めっちゃ便利、お金が飛ぶ💸 </a> </h4> <a href="/entry/s/speakerdeck.com/iwamot/cline-so-convenient-money-flies" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 387 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://pm-ai-insights.com/start-from-issue/" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/d3e7cc45ad01639190189334428378e568f83b0d/height=288;version=1;width=512/https%3A%2F%2Fpm-ai-insights.com%2Fwp-content%2Fuploads%2F2025%2F03%2Fpm_ai_icon.png" alt="【要約】『イシューからはじめよ』 – プロダクトマネージャーが圧倒的成果を生むために必要な「イシュー度の高い課題」を見極める方法 - PM x LLM STUDIO"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://pm-ai-insights.com/start-from-issue/" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> 【要約】『イシューからはじめよ』 – プロダクトマネージャーが圧倒的成果を生むために必要な「イシュー度の高い課題」を見極める方法 - PM x LLM STUDIO </a> </h4> <a href="/entry/s/pm-ai-insights.com/start-from-issue/" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 221 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://gigazine.net/news/20250329-volkswagen-reintroducing-physical-controls/" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/86db39985e82983e5fa5e3e4eec46cdc46b34951/height=288;version=1;width=512/https%3A%2F%2Fi.gzn.jp%2Fimg%2F2025%2F03%2F29%2Fvolkswagen-reintroducing-physical-controls%2F00.jpg" alt="フォルクスワーゲンに物理ボタンが復活、デザイン責任者は「重要な機能をタッチスクリーンに委ねるという過ちを決して繰り返さない」と約束"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://gigazine.net/news/20250329-volkswagen-reintroducing-physical-controls/" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> フォルクスワーゲンに物理ボタンが復活、デザイン責任者は「重要な機能をタッチスクリーンに委ねるという過ちを決して繰り返さない」と約束 </a> </h4> <a href="/entry/s/gigazine.net/news/20250329-volkswagen-reintroducing-physical-controls/" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 159 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.itmedia.co.jp/news/articles/2503/29/news102.html" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/1faee46ab74e1989af7b048a46371d8bf4746a95/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Fnews%2Farticles%2F2503%2F29%2Fcover_news102.jpg" alt="イーロン・マスク氏、xAIがXを買収したと発表"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.itmedia.co.jp/news/articles/2503/29/news102.html" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> イーロン・マスク氏、xAIがXを買収したと発表 </a> </h4> <a href="/entry/s/www.itmedia.co.jp/news/articles/2503/29/news102.html" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 176 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://posfie.com/@blackstaragent/p/Joz0NwC" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/bd89cb75e0e749a97537d42739f1349624e482e4/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F196f0d6371238e2df9f1280b4ac0a9bd-1200x630.jpeg" alt="尊敬しているエンジニアの方々が片っ端からCline使い始めてて、明らかに時代が動いている面白さがある一方、「認知負荷かけても壊れない人間のチキンレース」になってきてる話"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://posfie.com/@blackstaragent/p/Joz0NwC" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> 尊敬しているエンジニアの方々が片っ端からCline使い始めてて、明らかに時代が動いている面白さがある一方、「認知負荷かけても壊れない人間のチキンレース」になってきてる話 </a> </h4> <a href="/entry/s/posfie.com/@blackstaragent/p/Joz0NwC" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 367 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://zenn.dev/jtechjapan_pub/articles/a1cace00f7f96f" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/b3a870bd6a353965b79a8e3b34fecdc28f10d74d/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--AzTzH8LX--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3ACline%2525E3%252581%2525A7Memory%252520Bank%2525E3%252582%252592%2525E3%252582%252584%2525E3%252582%252581%2525E3%252581%2525A6%2525E3%252582%2525BF%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252582%2525B9%2525E3%252583%252588%2525E3%252582%252592%2525E4%2525BD%2525BF%2525E3%252581%252586%2525E3%252581%252593%2525E3%252581%2525A8%2525E3%252581%2525AB%2525E3%252582%252588%2525E3%252581%2525A3%2525E3%252581%2525A6%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252583%252586%2525E3%252582%2525AD%2525E3%252582%2525B9%2525E3%252583%252588%2525E3%252582%252592%2525E6%25259C%252580%2525E9%252581%2525A9%2525E5%25258C%252596%2525E3%252581%252597%2525E3%252581%2525A6%2525E3%252582%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_34%3Atomohisa%252Cx_220%252Cy_108%2Fbo_3px_solid_rgb%3Ad6e3ed%252Cg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2E0YzA4MzFkMDkuanBlZw%3D%3D%252Cr_20%252Cw_90%252Cx_92%252Cy_102%2Fco_rgb%3A6e7b85%252Cg_south_west%252Cl_text%3Anotosansjp-medium.otf_30%3A%2525E3%252582%2525B8%2525E3%252582%2525A7%2525E3%252582%2525A4%2525E3%252583%252586%2525E3%252583%252583%2525E3%252582%2525AF%2525E3%252582%2525B8%2525E3%252583%2525A3%2525E3%252583%252591%2525E3%252583%2525B3%2525E3%252583%252596%2525E3%252583%2525AD%2525E3%252582%2525B0%252Cx_220%252Cy_160%2Fbo_4px_solid_white%252Cg_south_west%252Ch_50%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2dUY1NlSXBBM09KME83a1ZzWG1WUjhvYWpqN3RHVVV2QTJDZ2hKS2c9czk2LWM%3D%252Cr_max%252Cw_50%252Cx_139%252Cy_84%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="ClineでMemory Bankをやめてタスクリストを使うことによってコンテキストを最適化してる"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://zenn.dev/jtechjapan_pub/articles/a1cace00f7f96f" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> ClineでMemory Bankをやめてタスクリストを使うことによってコンテキストを最適化してる </a> </h4> <a href="/entry/s/zenn.dev/jtechjapan_pub/articles/a1cace00f7f96f" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 107 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.m3tech.blog/entry/2025/03/28/180000" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/9925bcef0f39ffbd51f01418455221187015405b/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F8f2855efa49a646b240b73e8112c81d52127b40d%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fm%252Fm3tech%252F20250328%252F20250328180007.png" alt="マルチテナントなWebサービスでデータベースをBigQueryからPostgreSQLに移行してRow Level Securityを導入した - エムスリーテックブログ"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.m3tech.blog/entry/2025/03/28/180000" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> マルチテナントなWebサービスでデータベースをBigQueryからPostgreSQLに移行してRow Level Securityを導入した - エムスリーテックブログ </a> </h4> <a href="/entry/s/www.m3tech.blog/entry/2025/03/28/180000" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 91 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://togetter.com/li/2531499" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/374e0e4a26dd7677c21decaa214c7bab0c4e2063/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F7f377b5d19afc83394be928296b2d1a8-1200x630.jpeg" alt="AIにスーツ着せてもらって証明写真ができました。志望動機も自己PRもAIに考えてもらいました。私がAIです。→面接に挑んだ結果がこちら"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://togetter.com/li/2531499" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> AIにスーツ着せてもらって証明写真ができました。志望動機も自己PRもAIに考えてもらいました。私がAIです。→面接に挑んだ結果がこちら </a> </h4> <a href="/entry/s/togetter.com/li/2531499" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 62 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.itmedia.co.jp/mobile/articles/2503/28/news174.html" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/adf655f93b8478f009103adc26c5a22626d4e980/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Fmobile%2Farticles%2F2503%2F28%2Fcover_news174.jpg" alt="クレカの「サイン決済」が原則できなくなるワケ 4月以降はユーザー/店舗にどんな影響がある?"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.itmedia.co.jp/mobile/articles/2503/28/news174.html" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> クレカの「サイン決済」が原則できなくなるワケ 4月以降はユーザー/店舗にどんな影響がある? </a> </h4> <a href="/entry/s/www.itmedia.co.jp/mobile/articles/2503/28/news174.html" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 57 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://anond.hatelabo.jp/20250329053638" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif" alt="はてブ終末期の終わり"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://anond.hatelabo.jp/20250329053638" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> はてブ終末期の終わり </a> </h4> <a href="/entry/s/anond.hatelabo.jp/20250329053638" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 41 users </a> </div> </li> </ul> </div> </div> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://please-sleep.cou929.nu/bash-strict-mode.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://please-sleep.cou929.nu/bash-strict-mode.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fplease-sleep.cou929.nu%2Fbash-strict-mode.html" alt="">シェルスクリプトを書くときにいつもやるやつを調べた </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/please-sleep.cou929.nu/bash-strict-mode.html" class="js-keyboard-entry-page-openable" title="シェルスクリプトを書くときにいつもやるやつを調べた (842 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 842 users </a> </span> </li> <li> <a href="/site/please-sleep.cou929.nu/" title="『please-sleep.cou929.nu』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> please-sleep.cou929.nu </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/02/17</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">bash のシェルスクリプトを書くときに、いつも脳死で以下をやっている。(同僚が整備してくれたものをコピペしている) エディタなり CI で shellcheck をまわす set -euxo pipefail と冒頭に書く こんな感じ #!/bin/bash set -euxo pipefail いつまでもコピペではさすがにアレなので、意味を調べたメモ。 shellcheck koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts イケてない書き方に警告を出してくれる それぞれの警告にはエラーコード割り振られていてとても便利 エラーコードごとに正誤例、解説が書かれているのでわかりやすい SC1000 の例 CI もそうだし、エディタのプラグインも充実 しているのでとりあえず入れておくと良い set</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/ShellScript" data-gtm-click-label="entry-search-result-item-tag">ShellScript</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://please-sleep.cou929.nu/bash-strict-mode.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://please-sleep.cou929.nu/bash-strict-mode.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/87bb59df23f4ab97a94294d3a89d9daa76699003/height=288;version=1;width=512/https%3A%2F%2Fplease-sleep.cou929.nu%2Fimages%2Fkosei-pic.png" alt="シェルスクリプトを書くときにいつもやるやつを調べた" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry "> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.iimc.kyoto-u.ac.jp/ja/whatsnew/information/detail/211228056999.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.iimc.kyoto-u.ac.jp/ja/whatsnew/information/detail/211228056999.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.iimc.kyoto-u.ac.jp%2Fja%2Fwhatsnew%2Finformation%2Fdetail%2F211228056999.html" alt="">スーパーコンピュータシステムのファイル消失のお詫び | お知らせ | 京都大学情報環境機構 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.iimc.kyoto-u.ac.jp/ja/whatsnew/information/detail/211228056999.html" class="js-keyboard-entry-page-openable" title="スーパーコンピュータシステムのファイル消失のお詫び | お知らせ | 京都大学情報環境機構 (824 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 824 users </a> </span> </li> <li> <a href="/site/www.iimc.kyoto-u.ac.jp/" title="『www.iimc.kyoto-u.ac.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.iimc.kyoto-u.ac.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/12/28</span></li> </ul> </div> <div class="centerarticle-entry-contents "> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">京都大学学術情報メディアセンター センター長 岡部 寿男 2021年12月14日 17時32分 から 2021年12月16日 12時43分にかけて,スーパーコンピュータシステムのストレージをバックアップするプログラム(日本ヒューレット・パッカード合同会社製)の不具合により,スーパーコンピュータシステムの大容量ストレージ(/LARGE0) の一部データを意図せず削除する事故が発生しました. 皆さまに大変なご迷惑をおかけすることになり,深くお詫び申し上げます. 今後,再びこのような事態の生じることのないよう再発防止に取り組む所存ですので,ご理解をいただきますよう,どうぞよろしくお願いいたします. ファイル消失の影響範囲 ・対象ファイルシステム: /LARGE0 ・ファイル削除期間:2021年12月14日 17時32分 ~ 2021年12月16日 12時43分 ・消失対象ファイル:2021年12</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0" data-gtm-click-label="entry-search-result-item-tag">システム</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">トラブル</a></li> <li><a href="/q/%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97" data-gtm-click-label="entry-search-result-item-tag">バックアップ</a></li> <li><a href="/q/%E5%A4%A7%E5%AD%A6" data-gtm-click-label="entry-search-result-item-tag">大学</a></li> <li><a href="/q/%E9%9A%9C%E5%AE%B3" data-gtm-click-label="entry-search-result-item-tag">障害</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF" data-gtm-click-label="entry-search-result-item-tag">コンピュータ</a></li> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.iimc.kyoto-u.ac.jp/ja/whatsnew/information/detail/211228056999.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://gigazine.net/news/20210220-getting-better-linux-10-project/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://gigazine.net/news/20210220-getting-better-linux-10-project/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fgigazine.net%2Fnews%2F20210220-getting-better-linux-10-project%2F" alt="">Linuxの基礎用語を完全理解するためにエンジニアが作成した「10のミニプロジェクト」とは? </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/gigazine.net/news/20210220-getting-better-linux-10-project/" class="js-keyboard-entry-page-openable" title="Linuxの基礎用語を完全理解するためにエンジニアが作成した「10のミニプロジェクト」とは? (773 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 773 users </a> </span> </li> <li> <a href="/site/gigazine.net/" title="『gigazine.net』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> gigazine.net </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/02/20</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">by Adam Harvey Linuxを利用していると「シェル」や「grep」「プロセス」といった言葉を目にします。エンジニアのCarl Riis氏はそんなLinuxの基礎用語の意味や仕組みをさまざまなウェブサイトから学習し、「10のミニプロジェクト」を作成することでスキルを向上させたとして、その詳細を公開しています。 Getting better at Linux with 10 mini-projects - carltheperson https://carltheperson.com/posts/10-things-linux GitHub - carltheperson/10-things-linux: Getting better at Linux with 10 mini-projects. https://github.com/carltheperson/10-thing</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E5%AD%A6%E7%BF%92" data-gtm-click-label="entry-search-result-item-tag">学習</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">プロジェクト</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2" data-gtm-click-label="entry-search-result-item-tag">エンジニア</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/GIGAZINE" data-gtm-click-label="entry-search-result-item-tag">GIGAZINE</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://gigazine.net/news/20210220-getting-better-linux-10-project/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://gigazine.net/news/20210220-getting-better-linux-10-project/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/342ce8326f842fc46c92a8719b77dd642f3a85e6/height=288;version=1;width=512/https%3A%2F%2Fi.gzn.jp%2Fimg%2F2021%2F02%2F20%2Fgetting-better-linux-10-project%2F00_m.jpg" alt="Linuxの基礎用語を完全理解するためにエンジニアが作成した「10のミニプロジェクト」とは?" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://dev.classmethod.jp/articles/my-best-mac-setup/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://dev.classmethod.jp/articles/my-best-mac-setup/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fdev.classmethod.jp%2Farticles%2Fmy-best-mac-setup%2F" alt="">ぼくの考えた最強のMac環境 | DevelopersIO </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/dev.classmethod.jp/articles/my-best-mac-setup/" class="js-keyboard-entry-page-openable" title="ぼくの考えた最強のMac環境 | DevelopersIO (758 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 758 users </a> </span> </li> <li> <a href="/site/dev.classmethod.jp/" title="『dev.classmethod.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> dev.classmethod.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/08/11</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは、クラスメソッドの岡です。 先日MacBookProにコーヒーをこぼしてしまい、見事に壊れました。 電源はつくけどバックアップが取れない。。しかし不幸中の幸いで直前にGoogleDriveにデータを移していて、gitにもpushしていたので復元する必要はあまりないかも、、? ということで、環境の見直しも兼ねて新しいMacをまっさらな状態からセットアップすることにしました。 今回はセットアップも兼ねて自分のお気に入りのツール等を一部ご紹介させていただこうと思います。 環境 macOS Catalina 10.15.6 アプリケーション 1Password: パスワード管理 Googleアカウントのパスワードすら覚えてないのでとりあえず1Passwordを入れます。 他にサインインしているデバイスがあれば、環境設定→アカウント→その他のデバイスを設定でセットアップ用のQRコードが出せ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/mac" data-gtm-click-label="entry-search-result-item-tag">mac</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E8%A8%AD%E5%AE%9A" data-gtm-click-label="entry-search-result-item-tag">設定</a></li> <li><a href="/q/%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">環境</a></li> <li><a href="/q/chrome" data-gtm-click-label="entry-search-result-item-tag">chrome</a></li> <li><a href="/q/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">インストール</a></li> <li><a href="/q/Homebrew" data-gtm-click-label="entry-search-result-item-tag">Homebrew</a></li> <li><a href="/q/app" data-gtm-click-label="entry-search-result-item-tag">app</a></li> <li><a href="/q/tool" data-gtm-click-label="entry-search-result-item-tag">tool</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">開発環境</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://dev.classmethod.jp/articles/my-best-mac-setup/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://dev.classmethod.jp/articles/my-best-mac-setup/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/4ad4b9102cd11141d4fe6fbd8830c09cbb36df25/height=288;version=1;width=512/https%3A%2F%2Fdevio2023-media.developers.io%2Fwp-content%2Fuploads%2F2020%2F08%2Fbokunokangaeta_lion_1.png" alt="ぼくの考えた最強のMac環境 | DevelopersIO" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/ko1nksm/items/30982a5f357f26ae166f"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/ko1nksm/items/30982a5f357f26ae166f" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fko1nksm%2Fitems%2F30982a5f357f26ae166f" alt="">新しい curl コマンドの使い方 完全ガイド(2025年版) - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/ko1nksm/items/30982a5f357f26ae166f" class="js-keyboard-entry-page-openable" title="新しい curl コマンドの使い方 完全ガイド(2025年版) - Qiita (728 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 728 users </a> </span> </li> <li> <a href="/site/qiita.com/ko1nksm" title="『qiita.com/ko1nksm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/ko1nksm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2025/02/22</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに curl とは対話シェルやシェルスクリプトから HTTP 通信を行うのによく使われるコマンドです。あらゆる環境(100 種類の OS)で動作し、macOS や Windows には標準でインストールされています。商用サポートもあり、互換性は非常に重視され、何年経っても同じ書き方で動きます。非常に長く使われており(1998 年生まれの 27 歳1)、そして古い情報もたくさんあります。この記事ではそういった古い情報を、より簡単で新しい curl コマンドの使い方にアップデートします。最初に結論を書いておくと、 もう -X POST -H &quot;Content-Type: applicatoin/json&quot; なんて書かなくていいですよ。 (記事を読まない人のためのリンク) この記事を書くにあたって以下の記事を参考にしています。この記事が書かれたのは 2015 年、現在はそれから 10 年後</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/curl" data-gtm-click-label="entry-search-result-item-tag">curl</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/HTTP" data-gtm-click-label="entry-search-result-item-tag">HTTP</a></li> <li><a href="/q/qiita" data-gtm-click-label="entry-search-result-item-tag">qiita</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/network" data-gtm-click-label="entry-search-result-item-tag">network</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/ko1nksm/items/30982a5f357f26ae166f"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/ko1nksm/items/30982a5f357f26ae166f" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/09474f8a00d647e83dc55f62c3cd073342612ca2/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGNTQ5MTglMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2OTM1Mjg_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmZtPXBuZzMyJnM9YjQzZjY0ZGMzZWVjY2UyZTY1MGQ4NTRlNzk3ZDI2NGQ%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D8fcfde890a56b8fea74f53d87eeef4e6%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JTIwJUU2JTk2JUIwJUUzJTgxJTk3JUUzJTgxJTg0JTIwY3VybCUyMCVFMyU4MiVCMyVFMyU4MyU5RSVFMyU4MyVCMyVFMyU4MyU4OSVFMyU4MSVBRSVFNCVCRCVCRiVFMyU4MSU4NCVFNiU5NiVCOSUyMCVFNSVBRSU4QyVFNSU4NSVBOCVFMyU4MiVBQyVFMyU4MiVBNCVFMyU4MyU4OSVFRiVCQyU4ODIwMjUlRTUlQjklQjQlRTclODklODglRUYlQkMlODkmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz1iMTE0ZWI0ZTM5ZGJhMDM0MjEzNzNmNThlZGNhZTllMw%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBrbzFua3NtJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9ODVlMzIyOWJiNjA2ZTE4YzM2ZmM0MzNjMTk0ZjJkMmI%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3D8f3c5a8ca0fb33185350aeeb796da3ad" alt="新しい curl コマンドの使い方 完全ガイド(2025年版) - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/tmtms/articles/202105-sudo-su"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/tmtms/articles/202105-sudo-su" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Ftmtms%2Farticles%2F202105-sudo-su" alt="">sudo su とかしてる人はだいたいおっさん </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/tmtms/articles/202105-sudo-su" class="js-keyboard-entry-page-openable" title="sudo su とかしてる人はだいたいおっさん (672 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 672 users </a> </span> </li> <li> <a href="/site/zenn.dev/tmtms" title="『zenn.dev/tmtms』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/tmtms </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/05/25</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">sudo su と sudo -s はほぼ同じ。実行されるシェルが異なることがある。 sudo su - と sudo -i もほぼ同じ。環境変数のクリア的な意味だと sudo su - の方が強い。 以下は別に読まなくてもいい。 su 別のユーザーでシェルを実行するコマンド。自分は「す」とか「えすゆー」とかと呼んでる。 元は super user とか switch user とか substitute user の略だったらしい。 デフォルトでは root になるが、引数でユーザー名を指定するとそのユーザーになる。 新ユーザーのデフォルトのシェルとして設定されているシェルが実行される。 入力するパスワードは新ユーザーのパスワード。 ~% su Password: (rootのパスワード) root@hostname:/home/tmtms# id uid=0(root) gid=0(r</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/sudo" data-gtm-click-label="entry-search-result-item-tag">sudo</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E6%AD%B4%E5%8F%B2" data-gtm-click-label="entry-search-result-item-tag">歴史</a></li> <li><a href="/q/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2" data-gtm-click-label="entry-search-result-item-tag">エンジニア</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/tmtms/articles/202105-sudo-su"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/tmtms/articles/202105-sudo-su" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/698cf3f2dd3bf0251c27cd4c0d0c28d6fed8709b/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--TeRYr5pE--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3Asudo%252520su%252520%2525E3%252581%2525A8%2525E3%252581%25258B%2525E3%252581%252597%2525E3%252581%2525A6%2525E3%252582%25258B%2525E4%2525BA%2525BA%2525E3%252581%2525AF%2525E3%252581%2525A0%2525E3%252581%252584%2525E3%252581%25259F%2525E3%252581%252584%2525E3%252581%25258A%2525E3%252581%2525A3%2525E3%252581%252595%2525E3%252582%252593%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3A%2525E3%252581%2525A8%2525E3%252581%2525BF%2525E3%252581%25259F%2525E3%252581%2525BE%2525E3%252581%252595%2525E3%252581%2525B2%2525E3%252582%25258D%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2o3UVVHOE5NdEJhRmZqWFZ4RmFmMUNnSkJTQ21MRW1LRWVKbHQtd1E9czI1MC1j%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="sudo su とかしてる人はだいたいおっさん" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://speakerdeck.com/techouse/depuroiworen-saretanode-jiao-watutatong-rinidepuroisitarazhang-hai-ninatutajian-an-noyarakasiwoyue-eteyuke"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/techouse/depuroiworen-saretanode-jiao-watutatong-rinidepuroisitarazhang-hai-ninatutajian-an-noyarakasiwoyue-eteyuke" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fspeakerdeck.com%2Ftechouse%2Fdepuroiworen-saretanode-jiao-watutatong-rinidepuroisitarazhang-hai-ninatutajian-an-noyarakasiwoyue-eteyuke" alt="">デプロイを任されたので、教わった通りにデプロイしたら障害になった件 ~俺のやらかしを越えてゆけ~ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/techouse/depuroiworen-saretanode-jiao-watutatong-rinidepuroisitarazhang-hai-ninatutajian-an-noyarakasiwoyue-eteyuke" class="js-keyboard-entry-page-openable" title="デプロイを任されたので、教わった通りにデプロイしたら障害になった件 ~俺のやらかしを越えてゆけ~ (657 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 657 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/techouse" title="『speakerdeck.com/techouse』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/techouse </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2024/10/26</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Customer Identity Cloud powered by Auth0 を使ったマルチプロダクト構築の実践と総括</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E9%9A%9C%E5%AE%B3" data-gtm-click-label="entry-search-result-item-tag">障害</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/aws" data-gtm-click-label="entry-search-result-item-tag">aws</a></li> <li><a href="/q/%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4" data-gtm-click-label="entry-search-result-item-tag">デプロイ</a></li> <li><a href="/q/Rails" data-gtm-click-label="entry-search-result-item-tag">Rails</a></li> <li><a href="/q/IT" data-gtm-click-label="entry-search-result-item-tag">IT</a></li> <li><a href="/q/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%9A%9C%E5%AE%B3" data-gtm-click-label="entry-search-result-item-tag">システム障害</a></li> <li><a href="/q/deploy" data-gtm-click-label="entry-search-result-item-tag">deploy</a></li> <li><a href="/q/%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">クラウド</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/techouse/depuroiworen-saretanode-jiao-watutatong-rinidepuroisitarazhang-hai-ninatutajian-an-noyarakasiwoyue-eteyuke"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://speakerdeck.com/techouse/depuroiworen-saretanode-jiao-watutatong-rinidepuroisitarazhang-hai-ninatutajian-an-noyarakasiwoyue-eteyuke" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/cd23a9961f75280d0dec8f5f164968c2d4c5457e/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F84105fdf2dfc4ba585e148378241a1e8%2Fslide_0.jpg%3F32363253" alt="デプロイを任されたので、教わった通りにデプロイしたら障害になった件 ~俺のやらかしを越えてゆけ~" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/ko1nksm/items/b4b342f77f6d3ee1a0a9"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/ko1nksm/items/b4b342f77f6d3ee1a0a9" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fko1nksm%2Fitems%2Fb4b342f77f6d3ee1a0a9" alt="">【脱sed】いい加減シェルスクリプトで文字列をsedで置換するなんてやめよう - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/ko1nksm/items/b4b342f77f6d3ee1a0a9" class="js-keyboard-entry-page-openable" title="【脱sed】いい加減シェルスクリプトで文字列をsedで置換するなんてやめよう - Qiita (602 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 602 users </a> </span> </li> <li> <a href="/site/qiita.com/ko1nksm" title="『qiita.com/ko1nksm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/ko1nksm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/08/31</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/sed" data-gtm-click-label="entry-search-result-item-tag">sed</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/Qiita" data-gtm-click-label="entry-search-result-item-tag">Qiita</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/ko1nksm/items/b4b342f77f6d3ee1a0a9"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/ko1nksm/items/b4b342f77f6d3ee1a0a9" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/4a12211aefda8a732f2290c1758c818b847559d0/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGNTQ5MTglMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2OTM1Mjg_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmZtPXBuZzMyJnM9YjQzZjY0ZGMzZWVjY2UyZTY1MGQ4NTRlNzk3ZDI2NGQ%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D8fcfde890a56b8fea74f53d87eeef4e6%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JUUzJTgwJTkwJUU4JTg0JUIxc2VkJUUzJTgwJTkxJUUzJTgxJTg0JUUzJTgxJTg0JUU1JThBJUEwJUU2JUI4JTlCJUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUUzJTgyJUI5JUUzJTgyJUFGJUUzJTgzJUFBJUUzJTgzJTk3JUUzJTgzJTg4JUUzJTgxJUE3JUU2JTk2JTg3JUU1JUFEJTk3JUU1JTg4JTk3JUUzJTgyJTkyc2VkJUUzJTgxJUE3JUU3JUJEJUFFJUU2JThGJTlCJUUzJTgxJTk5JUUzJTgyJThCJUUzJTgxJUFBJUUzJTgyJTkzJUUzJTgxJUE2JUUzJTgyJTg0JUUzJTgyJTgxJUUzJTgyJTg4JUUzJTgxJTg2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9N2ZkNWM5NjVlYThiNzMyODQyZmRlMGZmM2ZlYzcwYWY%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBrbzFua3NtJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9ODVlMzIyOWJiNjA2ZTE4YzM2ZmM0MzNjMTk0ZjJkMmI%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3D5d6f5bb40c346f6b28c3acd8d33f893e" alt="【脱sed】いい加減シェルスクリプトで文字列をsedで置換するなんてやめよう - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://operating-system-in-1000-lines.vercel.app/ja/welcome"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://operating-system-in-1000-lines.vercel.app/ja/welcome" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Foperating-system-in-1000-lines.vercel.app%2Fja%2Fwelcome" alt="">はじめに - Writing an OS in 1,000 Lines </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/operating-system-in-1000-lines.vercel.app/ja/welcome" class="js-keyboard-entry-page-openable" title="はじめに - Writing an OS in 1,000 Lines (595 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 595 users </a> </span> </li> <li> <a href="/site/operating-system-in-1000-lines.vercel.app/" title="『operating-system-in-1000-lines.vercel.app』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> operating-system-in-1000-lines.vercel.app </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/08/02</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">本書では、小さなOSをゼロから少しずつ作っていきます。 OSと聞くと腰が引けるかもしれませんが、OS (特にカーネル) の基本機能は案外単純です。巨大なオープンソースソフトウェアとしてよく挙げられるLinuxでさえ、バージョン0.01はたった8413行でした。様々な要求に応えるために次第に肥大化していっただけで、当初は大変素朴な実装になっていました。 本書では素朴なコンテキストスイッチ、ページング、ユーザーモード、コマンドラインシェル、ディスクデバイスドライバ、ファイルの読み書きをC言語で実装します。これだけ様々な機能が詰め込まれているのに、コードは合計でたった1000行未満です。 「1000行なら1日でできそう」と思うかもしれませんが、初学者には少なくとも3日はかかるでしょう。OS自作のハマりポイントは「デバッグ」です。アプリケーション開発とは違うデバッグ手法・能力を習得する必要がありま</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/OS" data-gtm-click-label="entry-search-result-item-tag">OS</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/%E6%9C%AC" data-gtm-click-label="entry-search-result-item-tag">本</a></li> <li><a href="/q/kernel" data-gtm-click-label="entry-search-result-item-tag">kernel</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E8%87%AA%E4%BD%9COS" data-gtm-click-label="entry-search-result-item-tag">自作OS</a></li> <li><a href="/q/%E8%87%AA%E4%BD%9C" data-gtm-click-label="entry-search-result-item-tag">自作</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://operating-system-in-1000-lines.vercel.app/ja/welcome"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://operating-system-in-1000-lines.vercel.app/ja/welcome" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/584a931079e7ac9e1497ee84881d350cb15b2b7b/height=288;version=1;width=512/https%3A%2F%2Foperating-system-in-1000-lines.vercel.app%2Fapi%2Fog" alt="はじめに - Writing an OS in 1,000 Lines" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://secondlife.hatenablog.jp/entry/2020/08/17/070735"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://secondlife.hatenablog.jp/entry/2020/08/17/070735" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fsecondlife.hatenablog.jp%2Fentry%2F2020%2F08%2F17%2F070735" alt="">MacOS ユーザが WSL では無い Windows のコンソール環境を整える - 2nd life (移転しました) </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/secondlife.hatenablog.jp/entry/2020/08/17/070735" class="js-keyboard-entry-page-openable" title="MacOS ユーザが WSL では無い Windows のコンソール環境を整える - 2nd life (移転しました) (585 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 585 users </a> </span> </li> <li> <a href="/site/secondlife.hatenablog.jp/" title="『secondlife.hatenablog.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> secondlife.hatenablog.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/08/17</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">先日、メインの開発環境を MacOS から Windows 10 Professional へと移しました。理由としては主に2点で、現在仕事を自宅の固定席で行っており PC を持ち運びする必要がなくなったため Mac より高速で安価な Windows デスクトップ機を使いたいこと(Ryzen 9使いたい!)、WSL2 が正式版となり使ってみた感じ問題なく WSL2 で仕事の開発ができそうだったことが挙げられます。 WSL2 はふつうに Linux なので問題なく開発環境の構築が行なえ、Windows からも VSCode Remote のおかげでで違和感なくWSL2上のコードを編集、実行ができ快適な開発が行えています。(なお、WSL2 についての記事は山程溢れているので、ここでは殆ど触れません。) しかしながら、WSL2 ではないふつうの Windows 上で開発する機会が出てきたので、M</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/windows" data-gtm-click-label="entry-search-result-item-tag">windows</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/WSL" data-gtm-click-label="entry-search-result-item-tag">WSL</a></li> <li><a href="/q/powershell" data-gtm-click-label="entry-search-result-item-tag">powershell</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">環境</a></li> <li><a href="/q/terminal" data-gtm-click-label="entry-search-result-item-tag">terminal</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">開発環境</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/git" data-gtm-click-label="entry-search-result-item-tag">git</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://secondlife.hatenablog.jp/entry/2020/08/17/070735"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://secondlife.hatenablog.jp/entry/2020/08/17/070735" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/b85f64e7a5ce61f65da667902730966364ffbeea/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F4adf782ca1cce717ce7b33c29619d01412e44b2c%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Ff%252Ffirstlife%252F20200813%252F20200813065201.png" alt="MacOS ユーザが WSL では無い Windows のコンソール環境を整える - 2nd life (移転しました)" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/the_exile/articles/5176b7a5c29bce"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/the_exile/articles/5176b7a5c29bce" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fthe_exile%2Farticles%2F5176b7a5c29bce" alt="">もっと使いやすいコマンドラインツール10選 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/the_exile/articles/5176b7a5c29bce" class="js-keyboard-entry-page-openable" title="もっと使いやすいコマンドラインツール10選 (561 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 561 users </a> </span> </li> <li> <a href="/site/zenn.dev/the_exile" title="『zenn.dev/the_exile』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/the_exile </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/09/11</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">背景 ls、cd、psなどのコマンド。 いずれも30年前のもので、今でも毎日使っていますが、&quot;オープンソースの世界には、これらの「古い」Linuxコマンドに代わり、より優れたコマンドラインツールがあるのだろうか?&quot;と思いました。 本記事では、Linuxのコマンドと同じことができるだけでなく、より使いやすいパラメータ、一目でわかる表示、クロスプラットフォーム対応など、使い方、パフォーマンス、表示の面でより優れた新機能を追加したオープンソースのコマンドラインツールを10個まとめてみました。 1. dust(du) 開発言語: Rust Github: https://github.com/bootandy/dust スター数: 4.4k 代替コマンド: du 使用方法: dust プラットフォーム: Windows、Linux、macOS 説明: ディレクトリやファイルのサイズを一目でわかるよ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%83%84%E3%83%BC%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">ツール</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/rust" data-gtm-click-label="entry-search-result-item-tag">rust</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> <li><a href="/q/tool" data-gtm-click-label="entry-search-result-item-tag">tool</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/the_exile/articles/5176b7a5c29bce"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/the_exile/articles/5176b7a5c29bce" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/440763d989ce10ec092457e3856801cd1781ab62/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--JAodi4Wu--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252582%252582%2525E3%252581%2525A3%2525E3%252581%2525A8%2525E4%2525BD%2525BF%2525E3%252581%252584%2525E3%252582%252584%2525E3%252581%252599%2525E3%252581%252584%2525E3%252582%2525B3%2525E3%252583%25259E%2525E3%252583%2525B3%2525E3%252583%252589%2525E3%252583%2525A9%2525E3%252582%2525A4%2525E3%252583%2525B3%2525E3%252583%252584%2525E3%252583%2525BC%2525E3%252583%2525AB10%2525E9%252581%2525B8%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3ARUI%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2l4VVMwY0t3RHdtTktYOVczRUxHWUVaMk8tVnVDNXFnSWI0QjQwcEE9czk2LWM%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="もっと使いやすいコマンドラインツール10選" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/ko1nksm/items/9650ed1fc21d668f2732"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/ko1nksm/items/9650ed1fc21d668f2732" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fko1nksm%2Fitems%2F9650ed1fc21d668f2732" alt="">シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の本当の理由を知ると優れた文法が見えてくる - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/ko1nksm/items/9650ed1fc21d668f2732" class="js-keyboard-entry-page-openable" title="シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の本当の理由を知ると優れた文法が見えてくる - Qiita (532 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 532 users </a> </span> </li> <li> <a href="/site/qiita.com/ko1nksm" title="『qiita.com/ko1nksm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/ko1nksm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/11/10</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の本当の理由を知ると優れた文法が見えてくるShellScriptBashUNIXshellPOSIX はじめに シェルスクリプトの変数代入で = の前後にスペースを置くことができない理由は、検索すれば「プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話」のような記事がすぐに見つかります。記事に書いてあるとおり変数代入とコマンド呼び出しと区別がつかないからです。それは間違いではないんですが、私はもう少し説明が足りないと感じています。そこで今回は = の前後にスペースを置けない本当の理由を解説したいと思います。 の前に皆さんにはこの話を読みながら、自分がシェルスクリプトの言語設計者だったとしたら、どういう言語仕様にするかを考えて欲しいです。なぜかと言うとシェルスクリプトの文</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/shellscript" data-gtm-click-label="entry-search-result-item-tag">shellscript</a></li> <li><a href="/q/qiita" data-gtm-click-label="entry-search-result-item-tag">qiita</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/ko1nksm/items/9650ed1fc21d668f2732"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/ko1nksm/items/9650ed1fc21d668f2732" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/7b86dc5a555503511c430beb6e5bf600fdefa7b6/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUUzJTgyJUI5JUUzJTgyJUFGJUUzJTgzJUFBJUUzJTgzJTk3JUUzJTgzJTg4JUUzJTgxJUFGJUU1JUE0JTg5JUU2JTk1JUIwJUU0JUJCJUEzJUU1JTg1JUE1JUUzJTgxJUE3JTIwJTNEJTIwJUUzJTgxJUFFJUU1JTg5JThEJUU1JUJFJThDJUUzJTgxJUFCJUUzJTgyJUI5JUUzJTgzJTlBJUUzJTgzJUJDJUUzJTgyJUI5JUUzJTgyJTkyJUU3JUJEJUFFJUUzJTgxJTkxJUUzJTgxJUFBJUUzJTgxJTg0JUVGJUJDJTgxJUVGJUJEJUE1JUVGJUJEJUE1JUVGJUJEJUE1JUUzJTgxJUFFJUU2JTlDJUFDJUU1JUJEJTkzJUUzJTgxJUFFJUU3JTkwJTg2JUU3JTk0JUIxJUUzJTgyJTkyJUU3JTlGJUE1JUUzJTgyJThCJUUzJTgxJUE4JUU1JTg0JUFBJUUzJTgyJThDJUUzJTgxJTlGJUU2JTk2JTg3JUU2JUIzJTk1JUUzJTgxJThDJUU4JUE2JThCJUUyJTgwJUE2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz03NjY2ZjEyYTJkZjk2ZTdhYWVkNDYzNWVhN2ExNjFjMA%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrbzFua3NtJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0zNDA2OWFjMTI5MDIyYmE1ZjY0OTI5ZGU2ZGUwNDU5Zg%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D9b099df70616670694996b30af0e321e" alt="シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の本当の理由を知ると優れた文法が見えてくる - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/ko1nksm/items/f86537f8b533e1ef55c1"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/ko1nksm/items/f86537f8b533e1ef55c1" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fko1nksm%2Fitems%2Ff86537f8b533e1ef55c1" alt="">シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/ko1nksm/items/f86537f8b533e1ef55c1" class="js-keyboard-entry-page-openable" title="シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita (525 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 525 users </a> </span> </li> <li> <a href="/site/qiita.com/ko1nksm" title="『qiita.com/ko1nksm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/ko1nksm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/09/27</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに シェルスクリプトで二重起動防止やロックをする方法を検索すると、いろいろな方法や書き方が見つかりますが、どれを使えばよいのか、本当に正しく動くのか、不安になりますよね? ディレクトリ (mkdir) やシンボリックリンク (ln) を使った独自実装の例も見かけますが、エラー発生時や予期せぬ電源断、CTRL+C で止めたときなどでも問題は発生しないのでしょうか? まず、ディレクトリやシンボリックリンクを使った独自実装はしない。これを肝に銘じてください。シェルスクリプトでのロック管理はとても難しく、一般的な排他制御の知識に加えて、シェルスクリプト特有の問題、シグナルやトラップ、サブシェルや子プロセスの問題、さらには特定のシェル固有の仕様やバグなどさまざまな問題に対処する必要があり大変です。独自実装の例では古いロックファイルが残ってしまい、それをいつどのタイミングで片付ければ安全なのか?</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/ShellScript" data-gtm-click-label="entry-search-result-item-tag">ShellScript</a></li> <li><a href="/q/Qiita" data-gtm-click-label="entry-search-result-item-tag">Qiita</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/ko1nksm/items/f86537f8b533e1ef55c1"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/ko1nksm/items/f86537f8b533e1ef55c1" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/cff7d608d05c7f8649efd15759403b43144f889d/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUUzJTgyJUI5JUUzJTgyJUFGJUUzJTgzJUFBJUUzJTgzJTk3JUUzJTgzJTg4JUUzJTgxJUE3JUU1JUFFJTg5JUU1JTg1JUE4JUU3JUIwJUExJUU1JThEJTk4JUUzJTgxJUFBJUU0JUJBJThDJUU5JTg3JThEJUU4JUI1JUI3JUU1JThCJTk1JUU5JTk4JUIyJUU2JUFEJUEyJUUzJTgzJUJCJUU2JThFJTkyJUU0JUJCJTk2JTJGJUU1JTg1JUIxJUU2JTlDJTg5JUUzJTgzJUFEJUUzJTgzJTgzJUUzJTgyJUFGJUUzJTgxJUFFJUU1JUJFJUI5JUU1JUJBJTk1JUU4JUE3JUEzJUU4JUFBJUFDJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1kMTlhZjRiNzc5NWIxMWQyMDJiODU5ZjgwNmVmNWE0OQ%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTcxNiZ0eHQ9JTQwa28xbmtzbSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTMyJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YzU4ZjdmNmRhMDNjMTE2MGZlNWU3ZTc5Y2Y2OTljYTk%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D971e3b6c2a2bd16e242f1a8c7216b1a5" alt="シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://linuxcommandlibrary.com/basic/oneliners"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://linuxcommandlibrary.com/basic/oneliners" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Flinuxcommandlibrary.com%2Fbasic%2Foneliners" alt="">One-liners | Basic | Cheat sheet | Linux Command Library </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/linuxcommandlibrary.com/basic/oneliners" class="js-keyboard-entry-page-openable" title="One-liners | Basic | Cheat sheet | Linux Command Library (524 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 524 users </a> </span> </li> <li> <a href="/site/linuxcommandlibrary.com/" title="『linuxcommandlibrary.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> linuxcommandlibrary.com </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/11/12</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">$ wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/CLI" data-gtm-click-label="entry-search-result-item-tag">CLI</a></li> <li><a href="/q/cheatsheet" data-gtm-click-label="entry-search-result-item-tag">cheatsheet</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/oneliner" data-gtm-click-label="entry-search-result-item-tag">oneliner</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://linuxcommandlibrary.com/basic/oneliners"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://linuxcommandlibrary.com/basic/oneliners" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/bd7d8af8043acf0d71a3384af2b6487ac261810d/height=288;version=1;width=512/https%3A%2F%2Flinuxcommandlibrary.com%2Fimages%2Fpreview.jpg" alt="One-liners | Basic | Cheat sheet | Linux Command Library" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/kou_pg_0131/articles/favorite-cli-tools"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/kou_pg_0131/articles/favorite-cli-tools" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fkou_pg_0131%2Farticles%2Ffavorite-cli-tools" alt="">お気に入りのコマンドラインツールを淡々と紹介する </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/kou_pg_0131/articles/favorite-cli-tools" class="js-keyboard-entry-page-openable" title="お気に入りのコマンドラインツールを淡々と紹介する (513 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 513 users </a> </span> </li> <li> <a href="/site/zenn.dev/kou_pg_0131" title="『zenn.dev/kou_pg_0131』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/kou_pg_0131 </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2024/01/09</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">めちゃくちゃ良い記事でした。 「OSS は使っていることを公言するだけでも貢献になる」と songmu さんが言っていたので、私も貢献したいと思います。 僕も貢献したいのでよく使うコマンドラインツールを紹介していきます。 特定のプログラミング言語等に依存するツールは省いています。 actionlint - GitHub Actions の Workflow ファイルの静的検査 GitHub Actions の Workflow ファイルの静的検査ツールです。 かなり精度が高く、色々な設定ミスを検知してくれます。 エラーメッセージも見やすくて助かります。 aicommits - コミットメッセージを自動生成 変更内容を元に自動でコミットメッセージを AI が生成してくれるツールです。 コミットをする前にちゃんと確認してくれるのも安心感があって良いです。 cLive - ターミナル操作を自動化</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/cli" data-gtm-click-label="entry-search-result-item-tag">cli</a></li> <li><a href="/q/%E3%83%84%E3%83%BC%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">ツール</a></li> <li><a href="/q/tool" data-gtm-click-label="entry-search-result-item-tag">tool</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/github" data-gtm-click-label="entry-search-result-item-tag">github</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/rust" data-gtm-click-label="entry-search-result-item-tag">rust</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/kou_pg_0131/articles/favorite-cli-tools"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/kou_pg_0131/articles/favorite-cli-tools" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/dca80a855fda41257f0ccfe88c7e421a74734d07/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--7BmXLXXD--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252581%25258A%2525E6%2525B0%252597%2525E3%252581%2525AB%2525E5%252585%2525A5%2525E3%252582%25258A%2525E3%252581%2525AE%2525E3%252582%2525B3%2525E3%252583%25259E%2525E3%252583%2525B3%2525E3%252583%252589%2525E3%252583%2525A9%2525E3%252582%2525A4%2525E3%252583%2525B3%2525E3%252583%252584%2525E3%252583%2525BC%2525E3%252583%2525AB%2525E3%252582%252592%2525E6%2525B7%2525A1%2525E3%252580%252585%2525E3%252581%2525A8%2525E7%2525B4%2525B9%2525E4%2525BB%25258B%2525E3%252581%252599%2525E3%252582%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Akoki%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2hiNFlHemhPbVVNRThrZjV5Z01DakFoOWsxeEtCTzRLdWdVMExDQWc9czk2LWM%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="お気に入りのコマンドラインツールを淡々と紹介する" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://sreake.com/blog/shellscript-good-practices/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://sreake.com/blog/shellscript-good-practices/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fsreake.com%2Fblog%2Fshellscript-good-practices%2F" alt="">ShellScriptで自動化を楽にしたい時に知っておいても良いこと | sreake.com | 株式会社スリーシェイク </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/sreake.com/blog/shellscript-good-practices/" class="js-keyboard-entry-page-openable" title="ShellScriptで自動化を楽にしたい時に知っておいても良いこと | sreake.com | 株式会社スリーシェイク (509 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 509 users </a> </span> </li> <li> <a href="/site/sreake.com/" title="『sreake.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> sreake.com </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2024/07/17</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに こんにちは、皆さん。今日は、シェルスクリプトを使った高度な自動化のベストプラクティスとパターンについて解説します。これらは、ちょっとした知識で実行でき、作業を大幅に効率化できるTipsです。シェルスクリプトは、特にUNIX系システムでの自動化タスクに欠かせないツールです。適切に使用すれば、複雑なタスクを効率的に、そして信頼性高く実行できます。 トイルとは、反復的でマニュアルな作業のことを指します。これには、例えば、手動でのシステムのスケーリングや、エラーのトラブルシューティング、ルーティンなメンテナンス作業などが含まれます。トイルを特定し、それを自動化することで、エンジニアはより創造的なタスクやプロジェクトに焦点を合わせることができます。 トイルを判別する方法としては、以下のような基準が挙げられます: 手作業であること 完全な手作業だけでなく、「あるタスクを自動化するためのスクリ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/shellscript" data-gtm-click-label="entry-search-result-item-tag">shellscript</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/SRE" data-gtm-click-label="entry-search-result-item-tag">SRE</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://sreake.com/blog/shellscript-good-practices/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://sreake.com/blog/shellscript-good-practices/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/65bab80b1058ee4fa529e09e0d6e165db55293ef/height=288;version=1;width=512/https%3A%2F%2Fsreake.com%2Fwp-content%2Fuploads%2F2024%2F07%2Fshellscript-good-practices.png" alt="ShellScriptで自動化を楽にしたい時に知っておいても良いこと | sreake.com | 株式会社スリーシェイク" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://blog.magnolia.tech/entry/2023/01/21/211338"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://blog.magnolia.tech/entry/2023/01/21/211338" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fblog.magnolia.tech%2Fentry%2F2023%2F01%2F21%2F211338" alt="">『マスタリングLinuxシェルスクリプト 第2版』、こういう1冊手元に有るとずっと使える本はちゃんと買っておきたいですね - Magnolia Tech </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/blog.magnolia.tech/entry/2023/01/21/211338" class="js-keyboard-entry-page-openable" title="『マスタリングLinuxシェルスクリプト 第2版』、こういう1冊手元に有るとずっと使える本はちゃんと買っておきたいですね - Magnolia Tech (498 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 498 users </a> </span> </li> <li> <a href="/site/blog.magnolia.tech/" title="『blog.magnolia.tech』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> blog.magnolia.tech </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/01/22</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">マスタリングLinuxシェルスクリプト 第2版 ―Linuxコマンド、bashスクリプト、シェルプログラミング実践入門 作者:Mokhtar Ebrahim,Andrew MallettオライリージャパンAmazon 令和最新版のシェルスクリプトの入門書とリファレンスがセットになった1冊。手元に置いておくと安心感ありますよね。 令和最新版なので、冒頭からデバッグしたいならVisual Studio Code がオススメ、と出てきます。 コンテナ使おうと思ったらシェルスクリプトの読み書きの出番がどんどん増えていって、コンテナに一番必要なスキルはシェルスクリプトのスキルでは?と思っている今日この頃です(違います)が、そのくらいの用途に必要な要素は全部盛り込んであり、シェルスクリプトの文法と実践的な使い方に加えて、一緒に利用されることの多いgrep、awk、sedといったコマンドの解説も併せて載</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/%E6%9C%AC" data-gtm-click-label="entry-search-result-item-tag">本</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E6%9B%B8%E7%B1%8D" data-gtm-click-label="entry-search-result-item-tag">書籍</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/techfeed" data-gtm-click-label="entry-search-result-item-tag">techfeed</a></li> <li><a href="/q/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A" data-gtm-click-label="entry-search-result-item-tag">コンテナ</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://blog.magnolia.tech/entry/2023/01/21/211338"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://blog.magnolia.tech/entry/2023/01/21/211338" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/b354fd32ef17d4697a2d3a7b21f42e9a6e947334/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F2a0a3e40a74e57ae13c571922191de3f7235f674%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fm.media-amazon.com%252Fimages%252FI%252F412-gGfebPL._SL500_.jpg" alt="『マスタリングLinuxシェルスクリプト 第2版』、こういう1冊手元に有るとずっと使える本はちゃんと買っておきたいですね - Magnolia Tech" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry "> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://blog.8-p.info/ja/2021/09/15/bash/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://blog.8-p.info/ja/2021/09/15/bash/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fblog.8-p.info%2Fja%2F2021%2F09%2F15%2Fbash%2F" alt="">シェルスクリプトを書くのをやめる - blog.8-p.info </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/blog.8-p.info/ja/2021/09/15/bash/" class="js-keyboard-entry-page-openable" title="シェルスクリプトを書くのをやめる - blog.8-p.info (497 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 497 users </a> </span> </li> <li> <a href="/site/blog.8-p.info/" title="『blog.8-p.info』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> blog.8-p.info </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/09/15</span></li> </ul> </div> <div class="centerarticle-entry-contents "> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">今年から、できるだけシェルスクリプトを書くのをやめようとしている。私が毎日 zsh に打ち込んでいるのも広義のシェルスクリプトだし、自分用の雑なスクリプトを書くことはあるけれど、チームの他の人も将来に使ったり改変したりするようなものは、なるだけ他の言語を使っている。 シェルスクリプトを書くのは難しいし、その難しさは、学ぶに値しないといったら言い過ぎかもしれないけれど、2021年に初心者が取り組むべき問題とは言い難いと思う。 シェルは悪いプログラミング言語である Bash Strict Mode とかを使ってみても、シェルスクリプトには落とし穴が多すぎる。自分で書いたものを自分で使っている分には大丈夫なのだけど、スクリプトがチーム内で使われるようになると、考慮していなかったところ、例えばファイル名に空白文字が含まれるとか、そういうレベルの微妙なところで、ちゃんと書かれていないスクリプトは壊れ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/Python" data-gtm-click-label="entry-search-result-item-tag">Python</a></li> <li><a href="/q/%E8%A8%80%E8%AA%9E" data-gtm-click-label="entry-search-result-item-tag">言語</a></li> <li><a href="/q/%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">環境</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://blog.8-p.info/ja/2021/09/15/bash/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://atmarkit.itmedia.co.jp/ait/articles/2303/11/news027.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://atmarkit.itmedia.co.jp/ait/articles/2303/11/news027.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fatmarkit.itmedia.co.jp%2Fait%2Farticles%2F2303%2F11%2Fnews027.html" alt="">Bashを学べる全20回の入門動画 MicrosoftがYouTubeで無料公開 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/atmarkit.itmedia.co.jp/ait/articles/2303/11/news027.html" class="js-keyboard-entry-page-openable" title="Bashを学べる全20回の入門動画 MicrosoftがYouTubeで無料公開 (488 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 488 users </a> </span> </li> <li> <a href="/site/atmarkit.itmedia.co.jp/" title="『atmarkit.itmedia.co.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> atmarkit.itmedia.co.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/03/11</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Microsoftは2023年2月21日(米国時間)、初学者向けにBashを解説する全20回の動画シリーズ「Bash for Beginners」をYouTubeで公開した。 開発者向けQ&Aサイト「Stack Overflow」が2022年に実施した開発者調査でも、Bashは最も人気のある技術の7位に選ばれている。Bashは汎用(はんよう)性の高い強力なスクリプト言語であり、タスクの自動化、ファイルの管理、クラウド環境での作業などさまざまな領域で利用されている。 なぜBashの学習が他のスキルに役立つのか 関連記事 未経験者に「プログラミング言語」は求めない 調査で分かった企業が期待するスキルとは パーソルキャリアは、「doda ビジネスパーソンと企業の転職意識ギャップ調査」の結果を発表した。それによるとITエンジニア職「未経験歓迎」求人の割合は2年前(2021年1月)に比べて約3.0倍</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/microsoft" data-gtm-click-label="entry-search-result-item-tag">microsoft</a></li> <li><a href="/q/youtube" data-gtm-click-label="entry-search-result-item-tag">youtube</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E5%8B%95%E7%94%BB" data-gtm-click-label="entry-search-result-item-tag">動画</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://atmarkit.itmedia.co.jp/ait/articles/2303/11/news027.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://atmarkit.itmedia.co.jp/ait/articles/2303/11/news027.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/6e84fc6ab06f31b2e64248cbfc92fe06deb5bab5/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Fimages%2Flogo%2F1200x630_500x500_ait.gif" alt="Bashを学べる全20回の入門動画 MicrosoftがYouTubeで無料公開" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://chalow.net/2022-06-13-1.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://chalow.net/2022-06-13-1.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fchalow.net%2F2022-06-13-1.html" alt="">JSON を行単位にわかりやすく展開してくれるコマンド gron がピンポイントでとても便利 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/chalow.net/2022-06-13-1.html" class="js-keyboard-entry-page-openable" title="JSON を行単位にわかりやすく展開してくれるコマンド gron がピンポイントでとても便利 (451 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 451 users </a> </span> </li> <li> <a href="/site/chalow.net/" title="『chalow.net』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> chalow.net </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/06/13</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">JSON を行単位にわかりやすく展開してくれるコマンド gron がピンポイントでとても便利 2022-06-13-1 [Programming] コマンドラインでの JSON の操作には jq (軽量JSONパーサ)[2017-10-24-1] を使っています。万能で便利なんですが、奥まったところにある値だけを取りたいときとかちょっと面倒なんですよね。ちらっと値を見たいだけなのにおおげさになっちゃいがち。 ということで、 gron というのを使ってみました。 GitHub - tomnomnom/gron: Make JSON greppable!JSONをgrepしやすくするコマンドラインツールgronの紹介 - Qiitagronでjsonの扱いが楽になった話 – Tower of Engineers あ、これでいいや。 いわゆる「顧客(=私)が本当に必要だったもの」だわ。 例えば、</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/json" data-gtm-click-label="entry-search-result-item-tag">json</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/tool" data-gtm-click-label="entry-search-result-item-tag">tool</a></li> <li><a href="/q/%E4%BE%BF%E5%88%A9" data-gtm-click-label="entry-search-result-item-tag">便利</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> <li><a href="/q/cli" data-gtm-click-label="entry-search-result-item-tag">cli</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/%E3%83%84%E3%83%BC%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">ツール</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://chalow.net/2022-06-13-1.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://chalow.net/2022-06-13-1.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/4a2f05ff1d3019600b4171a8e3af1f0e8de06832/height=288;version=1;width=512/https%3A%2F%2Flive.staticflickr.com%2F65535%2F52142583688_2ee99881ae.jpg" alt="JSON を行単位にわかりやすく展開してくれるコマンド gron がピンポイントでとても便利" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://gist.github.com/greymd/7291d1d54587ad6ed401d536e1995b2c"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://gist.github.com/greymd/7291d1d54587ad6ed401d536e1995b2c" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fgist.github.com%2Fgreymd%2F7291d1d54587ad6ed401d536e1995b2c" alt="">sudo新一 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/gist.github.com/greymd/7291d1d54587ad6ed401d536e1995b2c" class="js-keyboard-entry-page-openable" title="sudo新一 (432 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 432 users </a> </span> </li> <li> <a href="/site/gist.github.com/greymd" title="『gist.github.com/greymd』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> gist.github.com/greymd </a> </li> <li> <a href="/hotentry/fun" data-gtm-click-label="entry-search-result-item-category">おもしろ</a> </li> <li><span class="entry-contents-date">2021/12/26</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">sudo新一.md オレは高校生シェル芸人 sudo 新一。幼馴染で同級生の more 利蘭と遊園地に遊びに行って、黒ずくめの男の怪しげな rm -rf / 現場を目撃した。端末をみるのに夢中になっていた俺は、背後から近づいてきたもう1人の --no-preserve-root オプションに気づかなかった。 俺はその男に毒薬を飲まされ、目が覚めたら・・・ OS のプリインストールから除かれてしまっていた! 『 sudo がまだ $PATH に残っていると奴らにバレたら、また命を狙われ、他のコマンドにも危害が及ぶ』 上田博士の助言で正体を隠すことにした俺は、 which に名前を聞かれて、とっさに『gnuplot』と名乗り、奴らの情報をつかむために、父親がシェル芸人をやっている蘭の $HOME に転がり込んだ。ところが、このおっちゃん・・・とんだヘボシェル芸人で、見かねた俺はおっちゃんになり</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%83%8D%E3%82%BF" data-gtm-click-label="entry-search-result-item-tag">ネタ</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E5%B7%A5%E8%97%A4%E6%96%B0%E4%B8%80" data-gtm-click-label="entry-search-result-item-tag">工藤新一</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> <li><a href="/q/%E6%BC%AB%E7%94%BB" data-gtm-click-label="entry-search-result-item-tag">漫画</a></li> <li><a href="/q/%E5%90%8D%E6%8E%A2%E5%81%B5%E3%82%B3%E3%83%8A%E3%83%B3" data-gtm-click-label="entry-search-result-item-tag">名探偵コナン</a></li> <li><a href="/q/neta" data-gtm-click-label="entry-search-result-item-tag">neta</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://gist.github.com/greymd/7291d1d54587ad6ed401d536e1995b2c"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://gist.github.com/greymd/7291d1d54587ad6ed401d536e1995b2c" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/1ef26f6cb4349557952890dbe3e567f7f98dc151/height=288;version=1;width=512/https%3A%2F%2Fgithub.githubassets.com%2Fassets%2Fgist-og-image-54fd7dc0713e.png" alt="sudo新一" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/moroya/articles/0ab24a733e4b7a"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/moroya/articles/0ab24a733e4b7a" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fmoroya%2Farticles%2F0ab24a733e4b7a" alt="">WSL2でWeb開発環境の構築メモ (zsh, node, dockerなど) </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/moroya/articles/0ab24a733e4b7a" class="js-keyboard-entry-page-openable" title="WSL2でWeb開発環境の構築メモ (zsh, node, dockerなど) (427 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 427 users </a> </span> </li> <li> <a href="/site/zenn.dev/moroya" title="『zenn.dev/moroya』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/moroya </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/12/09</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに Web開発といえばUNIXターミナルが使えるMacが便利だったが、ついに今年WSL2が正式リリースされた。これでようやくWindowsでまともなWeb開発環境を構築することが可能になって喜びもひとしお。 それどころか、WSL2, Windows Terminal, VS Codeと便利なツールがどんどんリリースされていてMacよりも便利といえる環境になってきたため、本格的にWindowsに乗り換えることにした。 環境構築をメモしていく。 WSL2とUbuntuのインストール 公式ドキュメント通り。 ディストリはUbuntuを選んだ。 Windows Terminal マイクロソフト純正。とても使いやすく、アップデートも精力的で今後も楽しみ。 Microsoft StoreからWindows Terminalをインストール 設定ファイルがJSONなのはエモいですね。 この辺で好きな</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/WSL" data-gtm-click-label="entry-search-result-item-tag">WSL</a></li> <li><a href="/q/windows" data-gtm-click-label="entry-search-result-item-tag">windows</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/wsl2" data-gtm-click-label="entry-search-result-item-tag">wsl2</a></li> <li><a href="/q/docker" data-gtm-click-label="entry-search-result-item-tag">docker</a></li> <li><a href="/q/ubuntu" data-gtm-click-label="entry-search-result-item-tag">ubuntu</a></li> <li><a href="/q/%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">環境</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">開発環境</a></li> <li><a href="/q/Microsoft" data-gtm-click-label="entry-search-result-item-tag">Microsoft</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/moroya/articles/0ab24a733e4b7a"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/moroya/articles/0ab24a733e4b7a" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/14afbe1680c392dcd117b885e069a9a0f94b4585/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--u-FgNAPZ--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AWSL2%2525E3%252581%2525A7Web%2525E9%252596%25258B%2525E7%252599%2525BA%2525E7%252592%2525B0%2525E5%2525A2%252583%2525E3%252581%2525AE%2525E6%2525A7%25258B%2525E7%2525AF%252589%2525E3%252583%2525A1%2525E3%252583%2525A2%252520%252528zsh%25252C%252520node%25252C%252520docker%2525E3%252581%2525AA%2525E3%252581%2525A9%252529%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Amoroya%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2E2NTJlYWFjZjkuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="WSL2でWeb開発環境の構築メモ (zsh, node, dockerなど)" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/magicmoment/articles/play-sound-command-20241205"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/magicmoment/articles/play-sound-command-20241205" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fmagicmoment%2Farticles%2Fplay-sound-command-20241205" alt="">長い処理には通知音コマンドを仕込んでおくと捗るぞ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/magicmoment/articles/play-sound-command-20241205" class="js-keyboard-entry-page-openable" title="長い処理には通知音コマンドを仕込んでおくと捗るぞ (425 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 425 users </a> </span> </li> <li> <a href="/site/zenn.dev/magicmoment" title="『zenn.dev/magicmoment』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/magicmoment </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2024/12/05</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは! Magic Moment フロントエンドエンジニアの @morishin です。 この記事は、Magic Moment Advent Calendar 2024 4 日目の記事です。 はじめに 開発あるある 皆さん開発をしていて、コマンドの &quot;待ち&quot; が長いとき、こんな経験はありませんか。 「ビルドに時間がかかるなぁ」 (別の作業をする) 「もう終わったかな (ターミナルチラー」 「まだかー」 (以降無限ループ) 作業に集中できない! 逆に 「このインストール時間かかるなぁ」 「終わるまでちょっと休憩しようかな (スヤァ」 〜3 時間後〜 「...あっ、いつの間にか終わってた!」 処理の完了に気付かずついつい休憩しすぎた! ありませんか?ありますよね? まあ休憩しすぎたっていうのはないにしても、実はエラーで処理が中断していたのに気付かなかった、というのはあるあるな気がします。</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/tips" data-gtm-click-label="entry-search-result-item-tag">tips</a></li> <li><a href="/q/mac" data-gtm-click-label="entry-search-result-item-tag">mac</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/%E9%80%9A%E7%9F%A5" data-gtm-click-label="entry-search-result-item-tag">通知</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/magicmoment/articles/play-sound-command-20241205"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/magicmoment/articles/play-sound-command-20241205" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/6680568136a7a1cc815a7a13790b44da65ec6ece/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--YdAiJr6D--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E9%252595%2525B7%2525E3%252581%252584%2525E5%252587%2525A6%2525E7%252590%252586%2525E3%252581%2525AB%2525E3%252581%2525AF%2525E9%252580%25259A%2525E7%25259F%2525A5%2525E9%25259F%2525B3%2525E3%252582%2525B3%2525E3%252583%25259E%2525E3%252583%2525B3%2525E3%252583%252589%2525E3%252582%252592%2525E4%2525BB%252595%2525E8%2525BE%2525BC%2525E3%252582%252593%2525E3%252581%2525A7%2525E3%252581%25258A%2525E3%252581%25258F%2525E3%252581%2525A8%2525E6%25258D%252597%2525E3%252582%25258B%2525E3%252581%25259E%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3AMagic%252520Moment%252520Tech%252520...%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzA4YjkwNjQ0ZWUuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="長い処理には通知音コマンドを仕込んでおくと捗るぞ" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://betterdev.blog/minimal-safe-bash-script-template/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://betterdev.blog/minimal-safe-bash-script-template/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fbetterdev.blog%2Fminimal-safe-bash-script-template%2F" alt="">Minimal safe Bash script template </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/betterdev.blog/minimal-safe-bash-script-template/" class="js-keyboard-entry-page-openable" title="Minimal safe Bash script template (421 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 421 users </a> </span> </li> <li> <a href="/site/betterdev.blog/" title="『betterdev.blog』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> betterdev.blog </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/12/15</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Published on December 14, 2020   ·   Updated on December 16, 2020 Bash scripts. Almost anyone needs to write one sooner or later. Almost no one says “yeah, I love writing them”. And that’s why almost everyone is putting low attention while writing them. I won’t try to make you a Bash expert (since I’m not a one either), but I will show you a minimal template that will make your scripts safer. You</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/ShellScript" data-gtm-click-label="entry-search-result-item-tag">ShellScript</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/Linux" data-gtm-click-label="entry-search-result-item-tag">Linux</a></li> <li><a href="/q/template" data-gtm-click-label="entry-search-result-item-tag">template</a></li> <li><a href="/q/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">テンプレート</a></li> <li><a href="/q/cli" data-gtm-click-label="entry-search-result-item-tag">cli</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://betterdev.blog/minimal-safe-bash-script-template/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://betterdev.blog/minimal-safe-bash-script-template/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/01aeeb99e7f390f60fa57f61e1343bd525e992b9/height=288;version=1;width=512/https%3A%2F%2Fbetterdev.blog%2Fminimal-safe-bash-script-template%2Fog.png" alt="Minimal safe Bash script template" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/ko1nksm/items/09bd50e51cc8663a4f0e"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/ko1nksm/items/09bd50e51cc8663a4f0e" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fko1nksm%2Fitems%2F09bd50e51cc8663a4f0e" alt="">いい加減シェルスクリプトで [ $? -eq 0 ] や [ $? -ne 0 ] なんて エラー処理を書くのはやめよう! - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/ko1nksm/items/09bd50e51cc8663a4f0e" class="js-keyboard-entry-page-openable" title="いい加減シェルスクリプトで [ $? -eq 0 ] や [ $? -ne 0 ] なんて エラー処理を書くのはやめよう! - Qiita (412 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 412 users </a> </span> </li> <li> <a href="/site/qiita.com/ko1nksm" title="『qiita.com/ko1nksm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/ko1nksm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2024/08/20</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに [ $? -eq 0 ] や [ $? -ne 0 ] は冗長でデメリットしかありません。非常に多く見かける書き方ですが、1979 年に Bourne シェルが広く公開された時からこのようなコードは必要ありませんでした。実際に当時はこのような書き方は使われておらず、このような書き方をしなければならなかった歴史的な経緯などはありません。これはなぜか広まってしまった良くない書き方です。 優れたコードとは無駄がないシンプルなコードです。丁寧なコードとは無駄な処理を書くことではありません。[ $? -eq 0 ] や [ $? -ne 0 ] は書かないほうが、簡単で読みやすくわかりやすくなります。優れた文法を持つシェルは短いコードで正しく動作し、良い書き方は最短の時間と最小の手間で目的を達成することができます。コマンドのエラー処理を簡潔に書くことができるのが、シェル言語の優れている点の</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/Qiita" data-gtm-click-label="entry-search-result-item-tag">Qiita</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/ko1nksm/items/09bd50e51cc8663a4f0e"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/ko1nksm/items/09bd50e51cc8663a4f0e" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/43a2a7b8ee94b5659b6dd6d14aeb6f02c2c6bd86/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGNTQ5MTglMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2OTM1Mjg_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmZtPXBuZzMyJnM9YjQzZjY0ZGMzZWVjY2UyZTY1MGQ4NTRlNzk3ZDI2NGQ%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D8fcfde890a56b8fea74f53d87eeef4e6%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JUUzJTgxJTg0JUUzJTgxJTg0JUU1JThBJUEwJUU2JUI4JTlCJUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUUzJTgyJUI5JUUzJTgyJUFGJUUzJTgzJUFBJUUzJTgzJTk3JUUzJTgzJTg4JUUzJTgxJUE3JTIwJTVCJTIwJTI0JTNGJTIwLWVxJTIwMCUyMCU1RCUyMCVFMyU4MiU4NCUyMCU1QiUyMCUyNCUzRiUyMC1uZSUyMDAlMjAlNUQlMjAlRTMlODElQUElRTMlODIlOTMlRTMlODElQTYlMjAlRTMlODIlQTglRTMlODMlQTklRTMlODMlQkMlRTUlODclQTYlRTclOTAlODYlRTMlODIlOTIlRTYlOUIlQjglRTMlODElOEYlRTMlODElQUUlRTMlODElQUYlRTMlODIlODQlRTMlODIlODElRTMlODIlODglRTMlODElODYlRUYlQkMlODEmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz1jZDg3NWQ1NmUzYzAzYjJiYzA2NDJlODRkZjlhOGQ4ZQ%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBrbzFua3NtJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9ODVlMzIyOWJiNjA2ZTE4YzM2ZmM0MzNjMTk0ZjJkMmI%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3D37916b2f47181baacefc69b1cacc89e8" alt="いい加減シェルスクリプトで [ $? -eq 0 ] や [ $? -ne 0 ] なんて エラー処理を書くのはやめよう! - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/autotaker1984/items/bc758fcf368c1a167353"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/autotaker1984/items/bc758fcf368c1a167353" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fautotaker1984%2Fitems%2Fbc758fcf368c1a167353" alt="">Bash Scriptの作法 - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/autotaker1984/items/bc758fcf368c1a167353" class="js-keyboard-entry-page-openable" title="Bash Scriptの作法 - Qiita (410 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 410 users </a> </span> </li> <li> <a href="/site/qiita.com/autotaker1984" title="『qiita.com/autotaker1984』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/autotaker1984 </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/09/20</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに チーム開発でシェルスクリプト(特にBash Script)を書く際に守るべきルールをまとめます。 シェルスクリプトのコードレビューをする際等にお役立てください。 スクリプト名 -区切りの小文字英数字(いわゆるkebab-case)をつける。拡張子は.sh. これは特に理由があるわけではないので_区切りでもよいし、チーム内にzshやfish等の他Shell愛好家がいる場合は拡張子は.bashでも良い。どちらにせよチーム内では統一しておかないと混乱の元となる。 改行コード LFを使用する。CRLFだと動作しないので書く際に間違うことはないが、Windows上のgitのautocrlf設定によってはご丁寧にCRLFでチェックアウトされてしまう。 避けるためにはgit config --global core.autocrlf inputとするか、.gitattributesをレポジトリ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/qiita" data-gtm-click-label="entry-search-result-item-tag">qiita</a></li> <li><a href="/q/CLI" data-gtm-click-label="entry-search-result-item-tag">CLI</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/UNIX" data-gtm-click-label="entry-search-result-item-tag">UNIX</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/autotaker1984/items/bc758fcf368c1a167353"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/autotaker1984/items/bc758fcf368c1a167353" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/cc9a7f0d578ca2a5e63a79dd8305bc5f16b20df7/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9QmFzaCUyMFNjcmlwdCVFMyU4MSVBRSVFNCVCRCU5QyVFNiVCMyU5NSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9YTdkYjA2NTY5MmY2MDRjNjYyNDkzZGJkMTYxODQ4NGI%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBhdXRvdGFrZXIxOTg0JnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0xN2FlYzhkNTIwZGFiODMxY2E5YWRjYjZkMTVlOTAyMg%26blend-x%3D142%26blend-y%3D436%26blend-mode%3Dnormal%26txt64%3DaW4g5qCq5byP5Lya56S-V29ya3MgSHVtYW4gSW50ZWxsaWdlbmNl%26txt-width%3D770%26txt-clip%3Dend%252Cellipsis%26txt-color%3D%25231E2121%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D36%26txt-x%3D156%26txt-y%3D536%26s%3Ddaee9d4af55a2650a0135f0052ac0244" alt="Bash Scriptの作法 - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/ko1nksm/items/0fa2f73dd6d9822518a3"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/ko1nksm/items/0fa2f73dd6d9822518a3" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fko1nksm%2Fitems%2F0fa2f73dd6d9822518a3" alt="">名著「入門UNIXシェルプログラミング」の超詳細なレビューをしてみた(古い内容の訂正) - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/ko1nksm/items/0fa2f73dd6d9822518a3" class="js-keyboard-entry-page-openable" title="名著「入門UNIXシェルプログラミング」の超詳細なレビューをしてみた(古い内容の訂正) - Qiita (408 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 408 users </a> </span> </li> <li> <a href="/site/qiita.com/ko1nksm" title="『qiita.com/ko1nksm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/ko1nksm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/06/19</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに そりゃまあ 30 年も経てば古くなりますよ。「入門UNIXシェルプログラミング」は今もシェルスクリプトに関するオススメの本として名前が挙がる名著です。しかしこの本は古い本です。POSIX でシェルが標準化される以前の本で、内容から判断するとおそらく 1990 年ぐらいの常識に基づいて書かれています。 古いから参考にならないと言うつもりはありません。しかしどれだけ優れた本でも時間の流れには勝てません。良書であると思っているからこそ、古くなってしまった内容は訂正する必要があると考えています。なおシェルスクリプトに関する古い本はこれ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E6%9C%AC" data-gtm-click-label="entry-search-result-item-tag">本</a></li> <li><a href="/q/%E5%85%A5%E9%96%80" data-gtm-click-label="entry-search-result-item-tag">入門</a></li> <li><a href="/q/Qiita" data-gtm-click-label="entry-search-result-item-tag">Qiita</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/ko1nksm/items/0fa2f73dd6d9822518a3"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/ko1nksm/items/0fa2f73dd6d9822518a3" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/5f30328388e632b8298b8dad9b2ef998b44be03d/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGNTQ5MTglMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2OTM1Mjg_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmZtPXBuZzMyJnM9YjQzZjY0ZGMzZWVjY2UyZTY1MGQ4NTRlNzk3ZDI2NGQ%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D8fcfde890a56b8fea74f53d87eeef4e6%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JUU1JTkwJThEJUU4JTkxJTk3JUUzJTgwJThDJUU1JTg1JUE1JUU5JTk2JTgwVU5JWCVFMyU4MiVCNyVFMyU4MiVBNyVFMyU4MyVBQiVFMyU4MyU5NyVFMyU4MyVBRCVFMyU4MiVCMCVFMyU4MyVBOSVFMyU4MyU5RiVFMyU4MyVCMyVFMyU4MiVCMCVFMyU4MCU4RCVFMyU4MSVBRSVFOCVCNiU4NSVFOCVBOSVCMyVFNyVCNCVCMCVFMyU4MSVBQSVFMyU4MyVBQyVFMyU4MyU5MyVFMyU4MyVBNSVFMyU4MyVCQyVFMyU4MiU5MiVFMyU4MSU5NyVFMyU4MSVBNiVFMyU4MSVCRiVFMyU4MSU5RiVFRiVCQyU4OCVFNSU4RiVBNCVFMyU4MSU4NCVFNSU4NiU4NSVFNSVBRSVCOSVFMyU4MSVBRSVFOCVBOCU4MiVFNiVBRCVBMyVFRiVCQyU4OSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTFhYWI2NGZkYmMwZDY3MmNhMDNiNWU3N2QxNGFiZTU0%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBrbzFua3NtJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9ODVlMzIyOWJiNjA2ZTE4YzM2ZmM0MzNjMTk0ZjJkMmI%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3Dc69b00a13c5a39a743b26cbe9572e809" alt="名著「入門UNIXシェルプログラミング」の超詳細なレビューをしてみた(古い内容の訂正) - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/mattn/articles/15f8efb2b89559"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mattn/articles/15f8efb2b89559" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fmattn%2Farticles%2F15f8efb2b89559" alt="">ls -l はなぜ事故を起こすのか </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mattn/articles/15f8efb2b89559" class="js-keyboard-entry-page-openable" title="ls -l はなぜ事故を起こすのか (405 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 405 users </a> </span> </li> <li> <a href="/site/zenn.dev/mattn" title="『zenn.dev/mattn』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/mattn </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/04/06</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに この記事は以下の記事で事故がなぜ起きたかを技術的に理解し筆者のtipsを共有しようと思い書きました。あくまで筆者のtipsですので、これが正しいとは限りません。 やはり、下記のコマンドが原因でした。 [root@foo script]# ls -l | sh 事故そのものは ls コマンドに -l を付けて実行してしまった事で、ls コマンドが出力したシンボリックリンクが以下の様になってしまったという話です。</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E4%BA%8B%E6%95%85" data-gtm-click-label="entry-search-result-item-tag">事故</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/%E9%81%8B%E7%94%A8" data-gtm-click-label="entry-search-result-item-tag">運用</a></li> <li><a href="/q/tips" data-gtm-click-label="entry-search-result-item-tag">tips</a></li> <li><a href="/q/engineering" data-gtm-click-label="entry-search-result-item-tag">engineering</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/mattn/articles/15f8efb2b89559"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/mattn/articles/15f8efb2b89559" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/9d5603196c491196026d4a301a40303428aa7ee5/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--NbmBxFM9--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3Als%252520-l%252520%2525E3%252581%2525AF%2525E3%252581%2525AA%2525E3%252581%25259C%2525E4%2525BA%25258B%2525E6%252595%252585%2525E3%252582%252592%2525E8%2525B5%2525B7%2525E3%252581%252593%2525E3%252581%252599%2525E3%252581%2525AE%2525E3%252581%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Amattn%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2IwYjA3ZWIzODAuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="ls -l はなぜ事故を起こすのか" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry "> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.iimc.kyoto-u.ac.jp/services/comp/pdf/file_loss_insident_20211228.pdf"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.iimc.kyoto-u.ac.jp/services/comp/pdf/file_loss_insident_20211228.pdf" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.iimc.kyoto-u.ac.jp%2Fservices%2Fcomp%2Fpdf%2Ffile_loss_insident_20211228.pdf" alt="">Lustre ファイルシステムのファイル消失について | 日本ヒューレット・パッカード合同会社 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.iimc.kyoto-u.ac.jp/services/comp/pdf/file_loss_insident_20211228.pdf" class="js-keyboard-entry-page-openable" title="Lustre ファイルシステムのファイル消失について | 日本ヒューレット・パッカード合同会社 (398 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 398 users </a> </span> </li> <li> <a href="/site/www.iimc.kyoto-u.ac.jp/" title="『www.iimc.kyoto-u.ac.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.iimc.kyoto-u.ac.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/12/28</span></li> </ul> </div> <div class="centerarticle-entry-contents "> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary"></p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%9A%9C%E5%AE%B3" data-gtm-click-label="entry-search-result-item-tag">システム障害</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">トラブル</a></li> <li><a href="/q/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0" data-gtm-click-label="entry-search-result-item-tag">システム</a></li> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> <li><a href="/q/%E9%9A%9C%E5%AE%B3" data-gtm-click-label="entry-search-result-item-tag">障害</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/HP" data-gtm-click-label="entry-search-result-item-tag">HP</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.iimc.kyoto-u.ac.jp/services/comp/pdf/file_loss_insident_20211228.pdf"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://yusukebe.com/posts/2022/rj-and-t/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://yusukebe.com/posts/2022/rj-and-t/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fyusukebe.com%2Fposts%2F2022%2Frj-and-t%2F" alt="">rjとtとjqコマンドでHTTPレスポンスを試験する - ゆーすけべー日記 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/yusukebe.com/posts/2022/rj-and-t/" class="js-keyboard-entry-page-openable" title="rjとtとjqコマンドでHTTPレスポンスを試験する - ゆーすけべー日記 (395 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 395 users </a> </span> </li> <li> <a href="/site/yusukebe.com/" title="『yusukebe.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> yusukebe.com </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/01/21</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Web 開発者は HTTP レスポンスをよく見る。 以前 CDN を導入する際に、キャッシュがヒットしているかどうか、どこのエッジがキャッシュを返しているかを確認するためにヘッダをよく見ていた。また、ヘッダだけではなく、TTFB といったレスポンスタイムも気にしている。とにかく HTTP レスポンスをよく見る。 HTTP レスポンスを確認する3つの方法 Chrome さえあれば DevTools を見て一目瞭然である。 とはいえ、コマンドラインで確認したい時がしばしばある。 GUI を操作するよりも手軽である。 その場合はcurlコマンドを叩けばよい。 これでプロトコル、ステータス、ヘッダが分かる。 また、レスポンスタイムを測りたければ、その名もttfb.shというcurlをラップしたコマンドラインツールがある。 https://github.com/jaygooby/ttfb.sh この</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/http" data-gtm-click-label="entry-search-result-item-tag">http</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/CLI" data-gtm-click-label="entry-search-result-item-tag">CLI</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/json" data-gtm-click-label="entry-search-result-item-tag">json</a></li> <li><a href="/q/jq" data-gtm-click-label="entry-search-result-item-tag">jq</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/curl" data-gtm-click-label="entry-search-result-item-tag">curl</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/test" data-gtm-click-label="entry-search-result-item-tag">test</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://yusukebe.com/posts/2022/rj-and-t/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://yusukebe.com/posts/2022/rj-and-t/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/4b7aff445985b68d6331267b4ed8aff0a8431206/height=288;version=1;width=512/https%3A%2F%2Fuser-images.githubusercontent.com%2F10682%2F150478035-00108e6d-8768-43e5-9e0b-aafc7007f52b.png" alt="rjとtとjqコマンドでHTTPレスポンスを試験する - ゆーすけべー日記" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/ko1nksm/items/7fec71f78a394a80ed2b"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/ko1nksm/items/7fec71f78a394a80ed2b" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fko1nksm%2Fitems%2F7fec71f78a394a80ed2b" alt="">findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識 - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/ko1nksm/items/7fec71f78a394a80ed2b" class="js-keyboard-entry-page-openable" title="findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識 - Qiita (393 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 393 users </a> </span> </li> <li> <a href="/site/qiita.com/ko1nksm" title="『qiita.com/ko1nksm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/ko1nksm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/10/17</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに find コマンドの使い方は、ざっくり調べただけではよくわからんとなりますが、見逃しがちなルールを知れば簡単に理解できます。find コマンドに限りませんが使い方を調べるのが面倒だからと曖昧な理解で使うと逆にもっと分からなくなって時間がかかります。急がば回れ、理解して正しく使ったほうがシンプルで楽で簡単です。この記事では find コマンドの使い方を理解するために必要なルールと使い方の実践的な知識をまとめました。 Q&amp;A(?): -type や -perm の説明はしないの? ⇒ それらはドキュメントを読むか検索すればすぐにわかることで難しいポイントではありません。重要なのは基本のルールを理解することです。 関連記事 POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき! 移植性の話はこちら ⇒ findコマンドのオ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/find" data-gtm-click-label="entry-search-result-item-tag">find</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/UNIX" data-gtm-click-label="entry-search-result-item-tag">UNIX</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/CLI" data-gtm-click-label="entry-search-result-item-tag">CLI</a></li> <li><a href="/q/qiita" data-gtm-click-label="entry-search-result-item-tag">qiita</a></li> <li><a href="/q/%E5%8B%89%E5%BC%B7" data-gtm-click-label="entry-search-result-item-tag">勉強</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/ko1nksm/items/7fec71f78a394a80ed2b"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/ko1nksm/items/7fec71f78a394a80ed2b" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/8aba6000f573edd2b4483c6d1fc6735cb32da762/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGNTQ5MTglMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2OTM1Mjg_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmZtPXBuZzMyJnM9YjQzZjY0ZGMzZWVjY2UyZTY1MGQ4NTRlNzk3ZDI2NGQ%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D8fcfde890a56b8fea74f53d87eeef4e6%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9ZmluZCVFMyU4MiVCMyVFMyU4MyU5RSVFMyU4MyVCMyVFMyU4MyU4OSVFMyU4MSVBRSVFNCVCRCVCRiVFMyU4MSU4NCVFNiU5NiVCOSVFMyU4MiU5MiVFNyVCMCVBMSVFNSU4RCU5OCVFMyU4MSVBQiVFNyU5MCU4NiVFOCVBNyVBMyVFMyU4MSU5OSVFMyU4MiU4QiVFMyU4MSU5RiVFMyU4MiU4MSVFMyU4MSVBRTclRTMlODElQTQlRTMlODElQUUlRTMlODMlQUIlRTMlODMlQkMlRTMlODMlQUIlRUYlQkMlOEIlRTUlQUUlOUYlRTglQjclQjUlRTclOUElODQlRTMlODElQUElRTclOUYlQTUlRTglQUQlOTgmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz0wZWU1ZjMzNjZiNGMyYjFmMGYwNDA2NDI2NGRhMTA5Mg%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBrbzFua3NtJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9ODVlMzIyOWJiNjA2ZTE4YzM2ZmM0MzNjMTk0ZjJkMmI%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3D5aec034e5513d49cd0d366ee84447125" alt="findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識 - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/mizchi/scraps/8969fe29a27e21"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mizchi/scraps/8969fe29a27e21" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fmizchi%2Fscraps%2F8969fe29a27e21" alt="">2023年のシェル環境構築 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mizchi/scraps/8969fe29a27e21" class="js-keyboard-entry-page-openable" title="2023年のシェル環境構築 (392 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 392 users </a> </span> </li> <li> <a href="/site/zenn.dev/mizchi" title="『zenn.dev/mizchi』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/mizchi </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/09/09</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">tl;dr fig starship zsh fzf sheldon なぜ vscode の .vscode/tasks.json が fishと非常に相性が悪い。とくに fish-nvm を使っていると、fish 経由のパス実行時に node と npm へパスが通らない。 そもそも fish を使っていた理由は autocomplete を快適にするためだったが、1年ぐらい Fig を使っていて、補完はこれを任せていいと気づいた。 Fig はこういうやつ そもそも fish の拡張コマンドを使わないように生活していた。方言を覚えたくない。というか bash 拡張や zsh 拡張もあんまり覚えたくない。</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/zsh" data-gtm-click-label="entry-search-result-item-tag">zsh</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/vscode" data-gtm-click-label="entry-search-result-item-tag">vscode</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/CLI" data-gtm-click-label="entry-search-result-item-tag">CLI</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/development" data-gtm-click-label="entry-search-result-item-tag">development</a></li> <li><a href="/q/%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">環境</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/mizchi/scraps/8969fe29a27e21"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/mizchi/scraps/8969fe29a27e21" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/786ba17f5cf4310e1c2f4fcb95fe521f0d0bc3b3/height=288;version=1;width=512/https%3A%2F%2Flh3.googleusercontent.com%2Fa-%2FAOh14GibrTGONvgwwk-_4leqY8LcFJSn_AhZzDYYJirMqg%3Ds250-c" alt="2023年のシェル環境構築" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/osw_nuco/items/a5d7173c1e443030875f"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/osw_nuco/items/a5d7173c1e443030875f" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fosw_nuco%2Fitems%2Fa5d7173c1e443030875f" alt="">【永久保存版】シェルスクリプト完全攻略ガイド - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/osw_nuco/items/a5d7173c1e443030875f" class="js-keyboard-entry-page-openable" title="【永久保存版】シェルスクリプト完全攻略ガイド - Qiita (380 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 380 users </a> </span> </li> <li> <a href="/site/qiita.com/osw_nuco" title="『qiita.com/osw_nuco』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/osw_nuco </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/12/10</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">弊社Nucoでは、他にも様々なお役立ち記事を公開しています。よかったら、Organizationのページも覗いてみてください。 また、Nucoでは一緒に働く仲間も募集しています!興味をお持ちいただける方は、こちらまで。 シェルスクリプトの世界へようこそ! シェルスクリプトって何? シェルスクリプトは普段 Bash などのシェルで実行しているコマンドを並べて、まとめて実行できるようにしたものです。ファイルのバックアップ、ログファイルの解析、システムのセットアップなど、ターミナルで行っていた一連の作業をまとめてシェルスクリプトに記述することで、シェルスクリプトを実行するだけで自動的に一連の作業を終わらせることができるようになります。また、シェルスクリプトはファイルに保存することになるため、再利用するのも簡単になります。 シェルスクリプトで使うコマンドの多くは UNIX コマンドになると思います</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/qiita" data-gtm-click-label="entry-search-result-item-tag">qiita</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/unix" data-gtm-click-label="entry-search-result-item-tag">unix</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/osw_nuco/items/a5d7173c1e443030875f"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/osw_nuco/items/a5d7173c1e443030875f" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/60b96b9f2fc4a1fb9e02f325d957d084669583da/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgwJTkwJUU2JUIwJUI4JUU0JUI5JTg1JUU0JUJGJTlEJUU1JUFEJTk4JUU3JTg5JTg4JUUzJTgwJTkxJUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUUzJTgyJUI5JUUzJTgyJUFGJUUzJTgzJUFBJUUzJTgzJTk3JUUzJTgzJTg4JUU1JUFFJThDJUU1JTg1JUE4JUU2JTk0JUJCJUU3JTk1JUE1JUUzJTgyJUFDJUUzJTgyJUE0JUUzJTgzJTg5JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz0wNzZhMTBmNzQ1NDBkNjRiNzE1MjI3Y2YxMTJiMWQ0Yg%26mark-x%3D120%26mark-y%3D96%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBvc3dfbnVjbyZ0eHQtY29sb3I9JTIzM0EzQzNDJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9NzFlNDcyYTc1OGExMWY5YTNlZGY0YzUzZGIxNTEyZmM%26blend-x%3D120%26blend-y%3D445%26blend-mode%3Dnormal%26txt64%3DaW4g5qCq5byP5Lya56S-TnVjbw%26txt-width%3D972%26txt-clip%3Dend%252Cellipsis%26txt-color%3D%25233A3C3C%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D36%26txt-x%3D134%26txt-y%3D546%26s%3D479ce3fcc63c856ae12a6dcb9fa8ae32" alt="【永久保存版】シェルスクリプト完全攻略ガイド - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/ko1nksm/items/9ff1f212255e8520070c"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/ko1nksm/items/9ff1f212255e8520070c" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fko1nksm%2Fitems%2F9ff1f212255e8520070c" alt="">POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき! - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/ko1nksm/items/9ff1f212255e8520070c" class="js-keyboard-entry-page-openable" title="POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき! - Qiita (379 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 379 users </a> </span> </li> <li> <a href="/site/qiita.com/ko1nksm" title="『qiita.com/ko1nksm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/ko1nksm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/09/13</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき!ShellScriptBashshellPOSIX はじめに find の出力を xargs にパイプで渡すというのはよく見かける使い方ですが、find -print0 | xargs -0 が使えない POSIX 準拠のシェルスクリプトでは find -exec {} + を使った方が良いです。安全かつ十分に速いからです。よく見かける -exec {} ; ではなく -exec {} + ですので間違えないようにしてください。多くのケースでは + の方が優れているのですが ; ばっかり使われているのを見ると、意外と知られてない気がします。 少しだけ予備知識として、-exec {} ; は -exec {} \; と ; をバックスラッシュでエスケープするのがよく見る使い方</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/ShellScript" data-gtm-click-label="entry-search-result-item-tag">ShellScript</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/POSIX" data-gtm-click-label="entry-search-result-item-tag">POSIX</a></li> <li><a href="/q/command" data-gtm-click-label="entry-search-result-item-tag">command</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/ko1nksm/items/9ff1f212255e8520070c"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/ko1nksm/items/9ff1f212255e8520070c" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/148c83397e3d4e2096d52f72c1cd0e0c16242311/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9UE9TSVglMjAlRTYlQkElOTYlRTYlOEIlQTAlRTMlODElQUUlRTMlODIlQjclRTMlODIlQTclRTMlODMlQUIlRTMlODIlQjklRTMlODIlQUYlRTMlODMlQUElRTMlODMlOTclRTMlODMlODglRTMlODElQTclRTMlODElQUYlMjBmaW5kJTIwJTdDJTIweGFyZ3MlMjAlRTMlODIlODglRTMlODIlOEElRTMlODIlODIlMjBmaW5kJTIwLWV4ZWMlMjAlN0IlN0QlMjAlMkIlMjAlRTMlODIlOTIlRTQlQkQlQkYlRTMlODElODYlRTMlODElQjklRTMlODElOEQlRUYlQkMlODEmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTJmYjU2OTViZTI2Y2ViMjUzOWQ5MzA0Yjc2ZTc3OTMw%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrbzFua3NtJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0zNDA2OWFjMTI5MDIyYmE1ZjY0OTI5ZGU2ZGUwNDU5Zg%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D7e62cc9f6a58afe22b86e8130eedf2fd" alt="POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき! - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/akauma16/items/c01e12f559a1231ae003"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/akauma16/items/c01e12f559a1231ae003" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Fakauma16%2Fitems%2Fc01e12f559a1231ae003" alt="">Bash: わかるとほんのちょっとうれしくなること5選 - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/akauma16/items/c01e12f559a1231ae003" class="js-keyboard-entry-page-openable" title="Bash: わかるとほんのちょっとうれしくなること5選 - Qiita (378 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 378 users </a> </span> </li> <li> <a href="/site/qiita.com/akauma16" title="『qiita.com/akauma16』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/akauma16 </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/07/14</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Bash の勉強を始めた頃、頭がごちゃごちゃになって調べたこと、わかるとほんのちょっとうれしくなったことを5個ピックアップしてみました。 - 目次 - alias sudo=&#39;sudo &#39; と alias sudo=&#39;sudo -E &#39; bash -c /dev/null grep -rl xargs で任意の位置に引数を展開する - 説明 - 1. alias sudo=&#39;sudo &#39; alias コマンドを使うと、長いコマンドを別名で登録できて、とても便利です。 でもそのまま sudo と組み合わせると、エラーになります。 例えば、la という登録名で、ls -a を実行させると、 sudo la でエラーになります。 bash のマニュアルには、以下のように書かれています。 alias [-p] [name[=value] ...] value の末尾に空白があると、エイリアスが展開</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コマンド</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/vim" data-gtm-click-label="entry-search-result-item-tag">vim</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">シェルスクリプト</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/qiita" data-gtm-click-label="entry-search-result-item-tag">qiita</a></li> <li><a href="/q/tips" data-gtm-click-label="entry-search-result-item-tag">tips</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/akauma16/items/c01e12f559a1231ae003"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/akauma16/items/c01e12f559a1231ae003" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/3abde780dbbf77cf3a9a7d9e196df7b92fca275b/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9QmFzaCUzQSUyMCVFMyU4MiU4RiVFMyU4MSU4QiVFMyU4MiU4QiVFMyU4MSVBOCVFMyU4MSVCQiVFMyU4MiU5MyVFMyU4MSVBRSVFMyU4MSVBMSVFMyU4MiU4NyVFMyU4MSVBMyVFMyU4MSVBOCVFMyU4MSU4NiVFMyU4MiU4QyVFMyU4MSU5NyVFMyU4MSU4RiVFMyU4MSVBQSVFMyU4MiU4QiVFMyU4MSU5MyVFMyU4MSVBOCVFRiVCQyU5NSVFOSU4MSVCOCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ODM0OWU0OTI4YTJkOTQ4MDJkNTBmOTkzMTc3OTRmYzY%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBha2F1bWExNiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9NzdmNDVkZGQwMWExZGM2MWEzMzI4MWZiMmQxM2IxNDU%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D1f4391d6d74db315a31e74667be62b59" alt="Bash: わかるとほんのちょっとうれしくなること5選 - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fsprout2000%2Farticles%2Fbd1fac2f3f83bc" alt="">macOS の zsh ではこれだけはやっておこう </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/sprout2000/articles/bd1fac2f3f83bc" class="js-keyboard-entry-page-openable" title="macOS の zsh ではこれだけはやっておこう (376 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 376 users </a> </span> </li> <li> <a href="/site/zenn.dev/sprout2000" title="『zenn.dev/sprout2000』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/sprout2000 </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/10/24</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/zsh" data-gtm-click-label="entry-search-result-item-tag">zsh</a></li> <li><a href="/q/mac" data-gtm-click-label="entry-search-result-item-tag">mac</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/shell" data-gtm-click-label="entry-search-result-item-tag">shell</a></li> <li><a href="/q/bash" data-gtm-click-label="entry-search-result-item-tag">bash</a></li> <li><a href="/q/linux" data-gtm-click-label="entry-search-result-item-tag">linux</a></li> <li><a href="/q/apple" data-gtm-click-label="entry-search-result-item-tag">apple</a></li> <li><a href="/q/Homebrew" data-gtm-click-label="entry-search-result-item-tag">Homebrew</a></li> <li><a href="/q/%E3%82%B7%E3%82%A7%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">シェル</a></li> <li><a href="/q/macos" data-gtm-click-label="entry-search-result-item-tag">macos</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/db6eae3c506a421941643199c6fc2fa9ddd3941a/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--5bmgq2H7--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AmacOS%252520%2525E3%252581%2525AE%252520zsh%252520%2525E3%252581%2525A7%2525E3%252581%2525AF%2525E3%252581%252593%2525E3%252582%25258C%2525E3%252581%2525A0%2525E3%252581%252591%2525E3%252581%2525AF%2525E3%252582%252584%2525E3%252581%2525A3%2525E3%252581%2525A6%2525E3%252581%25258A%2525E3%252581%252593%2525E3%252581%252586%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3A%2525E3%252581%2525AF%2525E3%252581%2525A3%2525E3%252581%2525B1%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzQyZmQ4YmQ3NmMuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="macOS の zsh ではこれだけはやっておこう" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> </ul> <div class="centerarticle-pager "> <span>1</span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=2" class="js-keyboard-openable">2</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=3" class="js-keyboard-openable">3</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=4" class="js-keyboard-openable">4</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=5" class="js-keyboard-openable">5</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=6" class="js-keyboard-openable">6</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=7" class="js-keyboard-openable">7</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=8" class="js-keyboard-openable">8</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=9" class="js-keyboard-openable">9</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=10" class="js-keyboard-openable">10</a></span> <span class="centerarticle-pager-next js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/%E3%82%B7%E3%82%A7%E3%83%AB?page=2" class="js-keyboard-openable">次のページ</a></span> </div> </div> <ins id="entrysearch-ad-rectangle-middle-sp" class="entrylist-ad-sp-fluid for-sp"></ins> <div id="entrysearch-ad-rectangle-bottom-sp" class="touch-ad-rectangle"></div> </div> <div class="entry-wrapper"> <section class="entry-group"> <h2 class="entry-group-sectionTitle">新着記事</h2> <ul class="entry-group-list"> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/drama-latest.com/archives/2975" title="【ドラマ「対岸の家事」第9話】ネタバレ解説!それぞれの選択の先に待つ現実とは?" data-gtm-label="entry-recentEntriesInEntrySearch-title">【ドラマ「対岸の家事」第9話】ネタバレ解説!それぞれの選択の先に待つ現実とは?</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/drama-latest.com/archives/2975" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/drama-latest.com/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fdrama-latest.com%2Farchives%2F2975" alt="">drama-latest.com</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/kfujiiasa.hatenablog.com/entry/2025/03/29/070633" title="中島みゆき~春・旅立つひとに贈る名曲選~ - 厚狭吉亭日乗・神戸残日録" data-gtm-label="entry-recentEntriesInEntrySearch-title">中島みゆき~春・旅立つひとに贈る名曲選~ - 厚狭吉亭日乗・神戸残日録</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/kfujiiasa.hatenablog.com/entry/2025/03/29/070633" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/kfujiiasa.hatenablog.com/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fkfujiiasa.hatenablog.com%2Fentry%2F2025%2F03%2F29%2F070633" alt="">kfujiiasa.hatenablog.com</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/ekakey.com/2023/10/18/fire_hd_10_fire_max_11/" title="【タブレット比較】新型 Fire HD 10(13世代)とFire Max 11 比較してみた!【イラスト制作】 | えかきー" data-gtm-label="entry-recentEntriesInEntrySearch-title">【タブレット比較】新型 Fire HD 10(13世代)とFire Max 11 比較してみた!【イラスト制作】 | えかきー</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/ekakey.com/2023/10/18/fire_hd_10_fire_max_11/" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/ekakey.com/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fekakey.com%2F2023%2F10%2F18%2Ffire_hd_10_fire_max_11%2F" alt="">ekakey.com</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/dancyu.jp/read/2025_00009596.html" title="【「松屋の牛めし」タレは現在33代目】本社を直撃!なぜ、そんなに味を変えるんですか | 【公式】dancyu (ダンチュウ)" data-gtm-label="entry-recentEntriesInEntrySearch-title">【「松屋の牛めし」タレは現在33代目】本社を直撃!なぜ、そんなに味を変えるんですか | 【公式】dancyu (ダンチュウ)</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/dancyu.jp/read/2025_00009596.html" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/dancyu.jp/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fdancyu.jp%2Fread%2F2025_00009596.html" alt="">dancyu.jp</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/www.gamespark.jp/article/2025/03/29/150891.html" title="『CoD』PCより極めて「本物」チート少ないのになぜ?チート報告の60%はコンソールプレイヤーに対してだった | Game*Spark - 国内・海外ゲーム情報サイト" data-gtm-label="entry-recentEntriesInEntrySearch-title">『CoD』PCより極めて「本物」チート少ないのになぜ?チート報告の60%はコンソールプレイヤーに対してだった | Game*Spark - 国内・海外ゲーム情報サイト</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/www.gamespark.jp/article/2025/03/29/150891.html" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/www.gamespark.jp/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.gamespark.jp%2Farticle%2F2025%2F03%2F29%2F150891.html" alt="">www.gamespark.jp</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/drama-latest.com/archives/5049" title="ドラマ「ドンケツ」のあらすじを解説!極道たちの熱き抗争と人間ドラマ" data-gtm-label="entry-recentEntriesInEntrySearch-title">ドラマ「ドンケツ」のあらすじを解説!極道たちの熱き抗争と人間ドラマ</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/drama-latest.com/archives/5049" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/drama-latest.com/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fdrama-latest.com%2Farchives%2F5049" alt="">drama-latest.com</a></span></p> </div> </div> </li> </ul> </section> </div> </div> <div id="keyboard-shortcut-help" class="shortcut-help is-hidden"> <h3 class="shortcut-help-title">キーボードショートカット一覧</h3> <p><span class="shortcut-help-key">j</span>次のブックマーク</p> <p><span class="shortcut-help-key">k</span>前のブックマーク</p> <p><span class="shortcut-help-key">l</span>あとで読む</p> <p><span class="shortcut-help-key">e</span>コメント一覧を開く</p> <p><span class="shortcut-help-key">o</span>ページを開く</p> <button tyle="button" class="shortcut-help-close js-close-button">✕</button> </div> <script type="text/javascript"> // ---------------- dfp section ---------------- var valve = valve || []; if (isMobile()) { valve.push(function(v) { v.defineDFPSlot({ unit: '/4374287/bookmark_overlay_sp', sizes: [[320,80],[320,70],[320,50]], slotId: 'touch-footer-ad' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrysearch_rectangle_bottom_sp', sizes: [[300,250]], slotId: 'entrysearch-ad-rectangle-bottom-sp' }); v.sealDFPSlots(); }); } else { valve.push(function(v) { v.defineDFPSlot({ unit: '/4374287/bookmark_entrysearch_sidebar_top_pc', sizes: [[300,250]], slotId: 'entrysearch-ad-sidebar-top' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrysearch_sidebar_bottom_pc', sizes: [[300,250]], slotId: 'entrysearch-ad-sidebar-bottom' }); v.sealDFPSlots(); }); } // ---------------- ydn section ---------------- if (isMobile()) { valve.push(function(v) { v.defineFluidSlot({ insId: 'entrysearch-ad-rectangle-middle-sp', yadsAdDs: '62199_242886' }); }); } </script> <script> var valve = window.valve || []; valve.push(function(v) { var pageKeyValues = {}; if (document.cookie.split(';').some(function(item) { return item.indexOf('202011_guest_status=register_incomplete') >= 0})) { pageKeyValues.bookmark_status = 'register_incomplete'; } v.config({ pageKeyValues: pageKeyValues, textSelector: ".entry-search-articles", content: { result: "ng" }, service: 'bookmark' }); }); </script> <script src="https://cdn.pool.st-hatena.com/valve/valve.js" async></script> <div class="footer"> <div class="footer-inner"> <div class="footer-inner-group footer-bookmark"> <h2 class="footer-title"><a href="/" data-gtm-label="footer-btop">はてなブックマーク</a></h2> <div class="footer-list-wrapper"> <ul class="footer-list footer-list--pc"> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/all" class="hotentry js-keyboard-openable" data-gtm-label="footerCategories-hotentry">総合</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/general" class="general js-keyboard-openable" data-gtm-label="footerCategories-general">一般</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/social" class="cat-social js-keyboard-openable" data-gtm-label="footerCategories-social">世の中</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/economics" class="cat-economics js-keyboard-openable" data-gtm-label="footerCategories-economics">政治と経済</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/life" class="cat-life js-keyboard-openable" data-gtm-label="footerCategories-life">暮らし</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/knowledge" class="cat-knowledge js-keyboard-openable" data-gtm-label="footerCategories-knowledge">学び</a></li> </ul> <ul class="footer-list footer-list--pc"> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/it" class="cat-it js-keyboard-openable" data-gtm-label="footerCategories-it">テクノロジー</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/entertainment" class="cat-entertainment js-keyboard-openable" data-gtm-label="footerCategories-entertainment">エンタメ</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/game" class="cat-game js-keyboard-openable" data-gtm-label="footerCategories-game">アニメとゲーム</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/fun" class="cat-fun js-keyboard-openable" data-gtm-label="footerCategories-fun">おもしろ</a></li> </ul> <ul class="footer-list"> <li class="footer-list-item"><a href="/guide/tools">アプリ・拡張機能</a></li> <li class="footer-list-item"><a href="https://bookmark.hatenastaff.com/">開発ブログ</a></li> <li class="footer-list-item"><a href="/help/">ヘルプ</a></li> <li class="footer-list-item"><a href="https://hatena.zendesk.com/hc/ja/categories/900000153166">お問い合わせ</a></li> <li class="footer-list-item footer-list-item--sp"><a href="/guide/guideline">ガイドライン</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/rule">利用規約</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/privacypolicy-ja">プライバシーポリシー</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/cookie-policy">利用者情報の外部送信について</a></li> </ul> <ul class="footer-list footer-list--pc"> <li class="footer-list-item footer-list-item--pc"><a href="/guide/guideline">ガイドライン</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/rule">利用規約</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/privacypolicy-ja">プライバシーポリシー</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/cookie-policy">利用者情報の外部送信について</a></li> </ul> </div> </div> <div class="footer-inner-group footer-bookmark-sns"> <h2 class="footer-title">公式Twitter</h2> <div class="footer-bookmark-list"> <ul class="footer-list"> <li class="footer-list-item"><a href="https://twitter.com/HatenaBookmark" target="_blank" rel="noopener" data-gtm-click-label="footer-officialTwitter-name">公式アカウント</a></li> <li class="footer-list-item"><a href="https://twitter.com/hatebu" target="_blank" rel="noopener" data-gtm-click-label="footer-hotentryTwitter-name">ホットエントリー</a></li> </ul> </div> </div> <div class="footer-inner-group footer-hatena"> <h2 class="footer-title">はてなのサービス</h2> <ul class="footer-list"> <li class="footer-list-item"><a href="https://hatenablog.com/" data-gtm-label="footerServices-blog">はてなブログ</a></li> <li class="footer-list-item"><a href="https://hatenablog.com/guide/pro?plus_via=hatenabookmark_footer&utm_source=hatenabookmark&utm_medium=referral&utm_campaign=hatenabookmark_to_hatenablog_pro&utm_content=hatenabookmark_footer" data-gtm-label="footerServices-blog-pro">はてなブログPro</a></li> <li class="footer-list-item"><a href="https://q.hatena.ne.jp/" data-gtm-label="footerServices-question">人力検索はてな</a></li> <li class="footer-list-item"><a href="http://d.hatena.ne.jp/" data-gtm-label="footerServices-keyword">はてなブログ タグ</a></li> <li class="footer-list-item"><a href="http://hatenanews.com/" data-gtm-label="footerServices-hatenanews">はてなニュース</a></li> <li class="footer-list-item"><a href="https://soredoko.jp/" data-gtm-label="footerServices-soredoko">ソレドコ</a></li> </ul> </div> </div> <div class="footer-bottom"> <div class="footer-app"> <ul> <li class="footer-list-item"><a href="https://apps.apple.com/jp/app/hatenabukkumaku/id354976659?mt=8" target="_blank" rel="noopener" data-gtm-click-label="footer-app-ios"><img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/dl-button/appstore@2x.png" alt="App Storeからダウンロード"></a></li> <li class="footer-list-item"><a href="https://play.google.com/store/apps/details?id=com.hatena.android.bookmark&amp;referrer=utm_source%3Dbookmark_sp%26utm_campaign%3Dbookmark_sp_user&hl=ja" target="_blank" rel="noopener" data-gtm-click-label="footer-app-android"><img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/dl-button/googleplay@2x.png" alt="Google Playで手に入れよう"></a></li> </ul> </div> <div class="copyright">Copyright &copy; 2005-2025 <a href="http://www.hatena.ne.jp/">Hatena</a>. All Rights Reserved.</div> </div> </div> <div id="touch-footer-ad"></div> <div id="touch-footer-ad-placeholder"></div> <div class="modal-overlay"></div> <script type="text/javascript" src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/js/v4/bookmark.star.js" async></script> <div class="js-head-notify is-hidden">設定を変更しました<span class="js-head-notify-close-button">x</span></div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10