You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
B! 58 0 0 0 (Bashの)シェルスクリプトに関してテストを導入するために フレームワークとしてBatsを導入します。 bats batsの使い方 assertion シェルスクリプトでなくても使える bats シェルスクリプトのテストツールとして恐らく一番有名なツール。 オリジナルはこちら。 こちらは4年くらい前に更新が止まっていますが、 個人でメンテナンスを続けていくことが難しくなったときに みんなで続けていこうとして使われる様になったのが 以下のレポジトリ。 batsというアカウントはすでに他に取られていたのでこういう名前になった模様。 Call for Maintainers · Issue #150 · sstephenson/bats Information about community-maintained fork · Issue #236 · sstephen
はじめに この記事は私の主観かつ知っていることをまとめたものです。古くからのシェルの専門家とかではなくここ数年の間に必要になった時にその都度調べたものなので間違いとかもあると思います。またタイトルの通りスクリプト言語としての比較です。つまりインタラクティブシェルの機能についての比較はしていません。(そもそも使い込んでるわけじゃないので知らないです。)POSIX シェルに限定しているのも私が他のシェルを詳しく知らないからです。もし今も使われていて(もしくは開発中で)ここに書かれていない POSIX シェルがありましたらコメントで教えて下さい。(※ csh, tcsh, fish は POSIX シェルではありません。) シェルの系統は少し古いですが「What does it mean to be “sh compatible”?」に投稿されている図が詳しくてわかりやすいです。またこちら「~s
grex is a library as well as a command-line utility that is meant to simplify the often complicated and tedious task of creating regular expressions. It does so by automatically generating a single regular expression from user-provided test cases. The resulting expression is guaranteed to match the test cases which it was generated from. This project has started as a Rust port of the JavaScript to
概要 Goでコマンドラインツールを作成する場合の選択肢としてspf13/cobraがあると思いますが、遂にv1.2.0 がリリースされました👏👏👏。大きな機能追加として completion が追加され、大枠の使い方とシェル補完の生成についてこのブログではやっていくメモ書きになってます。それ以上に言及しようと思ったのですが完全に体力不足でーす。 やっていく install CLIがあるので利用するさまざまな日本語での入門記事がcobra には存在するので詳しくはその辺を参照してください。ちなみに、公式ドキュメントが最高で公式ドキュメントに誤りがあればコントリビューションのチャンス。 $ go get -u github.com/spf13/cobra って思ったら雑な備忘録を自分も書いてましたが一切の参考にならん syu-m-5151.hatenablog.com init コマンド
コンピュータは便利ですが,それでも手間のかかる作業は多々あります。とくにGUI(グラフィカルユーザーインターフェース)のソフトウェアで次のような作業をやらないといけないとしたら,面倒そうだと思いませんか? 複数のファイルのファイル名を一括で変更する 大量の画像ファイルの中から全く同じ画像のファイルを探す 複数のファイルに記録されている数ヵ月にわたるログから特定の期間の情報だけを抽出する これらの作業をするには,ファイラー(Windowsのエクスプローラーなど)やエディタだけでは限界があります。専用ソフトをいくつか使ったり,単純な手作業を繰り返したりして作業することになります。 その点,シェルやスクリプト言語を使えば細かな条件をプログラミングすればどんな作業でも片付けられます。また,ターミナルのCLI(コマンドラインインターフェース)上では,コードを書いてそのまま実行できるため,たいへんお手
背景 これまで、 Ruby や Python のバージョンを切り替えるために anyenv を使っていた。 しかし anyenv ではいくつか困っていたことがあり、以前から気になっていた asdf というツールに移行することにした。 anyenv で困っていたこと tfenv のような例外に対応できない rbenv などと違って tfenv には init コマンドがない。そのため anyenv init 実行時にエラーが出てしまう anyenv で tfenv をインストールすることはできるが、この点が考慮されていないので自分でなんとかする必要がある anyenvでtfenvを使うときのエラーを抑止する - Qiita tfenv に限らず、今後こういった例外が他にも出てくるかもしれない init スクリプトが遅い 各 env の init コマンドを実行していくので、それなりに時間がか
echoコマンドの移植性が低い歴史的理由とPOSIXの改定方針 ~ 次期POSIXでbashのechoはPOSIX準拠になる! はじめに 実は bash に組み込まれた echo コマンドは POSIX に準拠していません。しかし 2023 年に予定されている次期 POSIX (Issue 8) の改定で、POSIX 準拠の動作になります。🎉🎉🎉 私のこの言い方には違和感を感じるかもしれません。「POSIX に違反している bash が問題点を修正して、POSIX に準拠させるのではないのか?」と。いいえ違います。POSIX 側が仕様を修正することで、bash は何も変更せずに過去のバージョンも含めて POSIX に準拠するようになります。面白いですね。 この記事は echo コマンドの移植性の問題の歴史を振り返りながら、それを例に POSIX 標準化団体がどのような方針で標準規格を
この記事は未踏2021採択者アドカレ! の 23 日目の記事です。 Cotowali について Cotowali は、2021年度未踏に「シェルスクリプトへのコンパイルを行う静的型付けスクリプト言語の開発」のテーマで採択され、現在開発中のスクリプト言語です[1] Cotowali コンパイラは V言語で記述されています。Vコミュニティ公式ではないプロジェクトとしては規模が大きく、V言語コンパイラのバグ発見にも貢献しています[2]。 コンセプト POSIX 準拠シェルスクリプトへのトランスパイル シェルスクリプトの機能を取り入れながらも、一般的な言語に近く理解しやすい文法 シンプルな静的型付け ちなみに、Cotowali はあくまでシェルスクリプトをバックエンドに使う新規のスクリプト言語であり、シェルスクリプトに型をつけるものではありません。 静的型付けではありますが、型システムはごく簡易な
すべての POSIX シェルで使用可能なので私はこれを推奨します。シェルスクリプトの改行コードは Windows の CR+LF ではなく LF を使用している前提です。いくつかの環境ではシェルスクリプトの改行コードに CR+LF を使用していても動くようなのですが(未調査)、遅かれ早かれ問題になるはずです。また需要は少ないと思いますが、POSIX シェル以前の Bourne シェルでも使える(おそらく)唯一の方法です。Solaris 10 などの古い環境にも対応させるのであればこの方法しかありません。 メリットはコードの量が最も少なく最も速いということです。デメリットは 2 行になるため少し不格好でインデントをする場合に困るだけですが、インデントに関してはこのような定数はスクリプトの上部の関数の外で定義するので通常は問題にならないはずです。 LF=$'\n' bash、ksh、mksh、
シェルスクリプトを書くのをやめる - blog.8-p.info これを見て: 夢の可能性が高くなってきたんですが、Perlのプラグマかなにかで、シェルスクリプトと混在できる……というか、存在しないサブルーチン呼び出しを外部コマンド呼び出しにするやつありませんでしたっけ— aereal / 青木華絵 (@aereal) 2021年9月16日 まじだ... https://t.co/IF6SyBR4o8— Kazuyoshi Kato (@kzys) 2021年9月16日 Shell - run shell commands transparently within perl - metacpan.org use Shell qw(cat ps cp); $passwd = cat('</etc/passwd'); @pslines = ps('-ww'), cp("/etc/passwd"
はじめに この記事はQiita夏祭り2020のイベントの1つ、パソナテックさんが開催している「〇〇(言語)のみを使って、今△△(アプリ)を作るとしたら」のテーマで投稿しています。 いやぁ良いお題ですよね。エンジニア心揺さぶられるし、景品も豪華だし、何よりちょっとワクワクしたので参加させていただきました。 今回は「ShellでSeleniumを作る ~Shellnium~」というお題でやっていきます。下記はShellniumで遊んでいるGIFです。 ブラウザの自動操作の模様をiTermの背景として鑑賞することができます。意味不明さがすごいですね。(透明度をいじってるとかではありません) いろんな言語でSeleniumは扱える Seleniumは皆さん御存知の通り、ブラウザの自動操作をするツールですね。 SeleniumはWebDriverを介してブラウザの自動操作を行っていくもので、php,
追記(2022/03/20) Linux限定だし概要レベルだけど包括的なドキュメントがあった。 2. Keyboard generalities キー入力したときに起きていることを説明している。 キーボードコントローラはキーボードドライバにスキャンコードを送信する (スキャンコードモードの)キーボードドライバはアプリケーションプログラムにスキャンコードを送信する (キーコードモードの)キーボードドライバはキー押下、キー離上それぞれのスキャンコードをキーコードに変換し、アプリケーションプログラムに送信する (それ以外の)キーボードドライバはキーコードでキーマップを辞書引きして、発見した文字列(エスケープシーケンスの場合もある)をアプリケーションプログラムに送信する 「アプリケーションプログラムに送信する」は、実際には「端末ドライバに送信する」に相当する。 (端末ドライバ=sttyなのかな)
Jack Wallen (Special to ZDNET.com) 翻訳校正: 編集部 2024-08-15 07:45 筆者は何十年も前から「Linux」を使っている。GUIが全面的に改善され、コマンドを全く実行しなくても済むようになったにもかかわらず、タスクを迅速に処理したいときは、今でもターミナルとコマンドラインインターフェース(CLI)に頼ることが多い。 ただし、誰もがコマンドラインに精通しているわけではない。威圧感を覚える人もいるだろう。 だが、そうした状況を甘んじて受け入れる必要はない。AIのおかげで、実践しながら学習することを可能にするアプリケーションが新たに登場しているからだ。「AI Shell」もそうしたアプリの1つだ。このアプリケーションについて詳しく説明する前に、1つ注意事項がある。AI ShellはOpenAIに依存するため、無料ではない。このアプリを使用するには
The Unix shell is pure wizardry. With the right incantation of shell spells, you can organise files, process text, compute data, and feed the output of any program to the input of any other. We might even say, paraphrasing Clarke’s Third Law: Any sufficiently clever shell one-liner is indistinguishable from magic. In this article we’ll explore a package called script that aims to sprinkle some Uni
The Missing Semester of Your CS Education Classes teach you all about advanced topics within CS, from operating systems to machine learning, but there’s one critical subject that’s rarely covered, and is instead left to students to figure out on their own: proficiency with their tools. We’ll teach you how to master the command-line, use a powerful text editor, use fancy features of version control
FizzBuzz の構成 find は -regex オプションにより、それに対して後続のアクションを実行するファイル名をフィルタすることができます。これを使って x/ の 3,5,15の倍数回の繰り返しをフィルタすることができ、これをループと組み合わせることで FizzBuzz を実装できます。 以下では読みやすさのために -regextype posix-extended を使っていますが、どの正規表現文法でも同じことができるはずです。 mkdir -p d/x find d/x -regextype posix-extended -regex 'd(/x){0,29}' -execdir mkdir x/x \; find d -regextype posix-extended \ -regex 'd((/x){15})+' -printf "FizzBuzz\n" -o \ -re
というのを作りました。 モチベーション The Twelve Factor App の設定でも推奨されている通り、昨今のCommand Line Interface (CLI) で利用するアプリケーションやCLIでの開発では環境変数を多用します。これによって多くの環境変数を扱ったり、環境変数に秘匿値を扱ったり、文字数の多い環境変数を扱ったり、という機会も増えました。 環境変数を使うためにはシェルに設定したり、昔ながらの env コマンドを使ったり、dotenvを使ったり、秘匿値を扱うenvchainなどといった便利なツールが用意されています。しかし、 それぞれを個別に使えるよりは統合的に環境変数を管理したい さらに高度な環境変数の設定機能を使いたい という2つの観点から新しいツールを実装しました。 基本的な使い方 zenvの機能は大きく分けると、 CLI上で環境変数を設定 .env ファイ
Windows ターミナルは、コマンド プロンプト、PowerShell、bash (Linux 用 Windows サブシステム (WSL) 経由) などの使い慣れたコマンド ライン シェル用の最新のホスト アプリケーションです。 主な機能には、複数のタブ、ペイン、Unicode および UTF-8 文字のサポート、GPU で高速化されたテキスト レンダリング エンジン、独自のテーマを作成したり、テキスト、色、背景、およびショートカットをカスタマイズしたりする機能があります。 さまざまなコマンド ライン アプリケーションをサポートする複数のプロファイル コマンド ライン インターフェイスを持つ任意のアプリケーションを Windows ターミナル内で実行できます。 これには、PowerShell およびコマンド プロンプトから Azure Cloud Shell、Ubuntu や Oh-M
はじめに 自作シェルを書いてみた記事はよく見かけるのですが、そのほとんどが fork -> exec という流れです。仕組みを学ぶという点で非常に有効なのでそれはそれで良いとして、 Rust では標準ライブラリの std::process::Command を使用してもっと簡単にコマンド実行ができるよ! という記事があまりないので書いてみました。 コマンドの実行 REPL パース処理はできるだけシンプルに書きます。 標準入力から1行読み取り、Command::spawn() で実行します。 それを繰り返すのが REPL (Read-Eval-Print Loop)です。 これだけでシェルと言い張っても良いと思っています🤔 use std::io::{self, Write}; use std::process::Command; fn main() { loop { // プロンプト p
2019年9月頃に公開された新たなインタラクティブシェルに「NuShell」がある。Rustで開発されており、macOSやLinuxのみならず、最初からWindowsにも対応している。5月14日(米国時間)、NuShellの開発者に行ったインタビューが「NuShell: the shell where traditional Unix meets modern development, written in Rust」として公開された。ここには、NuShellがどのような思想の下で開発されのかが、わかりやすくまとまっている。 NuShell - A new type of shell NuShellはパイプラインを構造化されたデータが移動するといった仕組みを取っている。データは基本的に表として移動していく仕組みになっているため、SQLインタプリタが動作しているようにも見える。UNIX系のコ
As a Software-Engineer I spent most of the time inside my terminal, So I need for that a fast terminal with fast tools to speed up my productivity. The tools written in rust help me to achieve that. let’s see in this article those tools. tl;dr alacritty A cross-platform, GPU-accelerated terminal emulator starship 🌌 The minimal, blazing-fast, and infinitely customizable prompt for any shell! exa A
ALWAYS ONMosh was built for constant mobile connectivity. You can flawlessly jump from home, to the train, and then to the office thanks to Mosh. Blink is rock-solid connected all the way. And don't be afraid to put your device to sleep, when you wake it up later, your connections will be intact. Lag can make or break an experience. Mosh precludes network lag by performing intelligent local echo.
課題編 シェルスクリプトで「あるグローバルな状態を変える操作を行い、その結果をチェックし、状態をもとに戻す」みたいなタスクをするときに「その結果をチェックし」のところでコマンドの終了ステータスを変数に入れて置きたいみたいなことがあります。例えば、次のようなコマンド操作です。 set -e # グローバルな状態を変える操作を行う git merge --no-ff --no-commit $main_branch || true # 結果をチェックしてexit codeを変数に入れる git diff --cached --exit-code --quiet ; code=$? # グローバルな状態をもとに戻す git merge --abort # 上位プロセスに結果を渡す exit $code スクリプト全体には set -e (コマンドが失敗するとシェルスクリプトが即座に終了する)を効
Kimihiko KitaseHead of Enterprise Marketing, Google Cloud Japan GCPの Cloud Shell がどんどん進化してます。この環境上で開発もできてしまうくらい、あらゆる事が実現できるようになってきましたが、みなさんは、全て知っているでしょうか?ここでは、知っておくと便利な 10 の Tips を取り上げ説明します。 1. Eclipse Orion ベースの UI GCP Cloud Shell がどんどん利用しやすくなっています。[エディタを立ち上げる] ボタンをクリックするとオープンソースの Eclipse Orion を利用した UI が表示されます。 2. Tmux への対応 Cloud Shell は Tmux に対応しているので、例えば、 Ctrl + b キーを押してから % キーを押すと、tmux により現在の
こんにちは(U・ω・U) AWS事業部の深澤です。 さて皆さん、いざプログラミングをしようとしてもなかなかテストがしにくいとか、良い書き方ないかな〜って感じたりしませんか?出来上がったソースコードを数ヶ月後の自分が読んでみて、「あれ?この処理って何してるんだっけ??」って思うのもよくあることです。また中には実際にスクリプトをbatch処理で使おうとしているけど、どんな風に書いたら良いか悩んでいる方とかいらっしゃるのではないでしょうか。今回は僕が運用の中で学んだ「こう書くと良いんじゃない」というTipsを書いて見ました!今回はshellスクリプトを採用しています。 環境 Amazon Linux 2 AMI (HVM), SSD Volume Type カーネル 4.14.173-137.229.amzn2.x86_64 Bashバージョン GNU bash, version 4.2.46(
alias open="pwsh.exe /c start" pwsh.exe を入れてない人は alias open="powershell.exe /c start" すると、open foobar がいい感じに開かれる。 # explorer が開く open . # デフォルトブラウザが開く open https://example.com/ # jpg に関連付けられているビュアーで開かれる open ./foo.jpg
Zellij: a Rusty terminal workspace releases a beta 2021-04-20 :: Aram Drevekenin After long months of work by a dedicated team of enthusiasts, today we are proud to announce the release of the beta version of Zellij! Zellij is a terminal workspace and multiplexer written in Rust, aiming to become a general purpose application development platform in the future. How to install? Download a prebuilt
重要 2022-01-30 追記 この記事で解説していた警告の出力は 2022-01-21 に取り消されました(参照 Revert deprecation of which)。そのため Debian which が GNU which に変わることは(少なくとも近い未来では)ないと思います。しかしながら which を使うよりは POSIX で規定されている command と type を使う方を推奨します。 はじめに which コマンドはシステムにインストールされてるとは限りません。実際に最小構成でインストールされてない環境として CentOS があります。一方 command -v は POSIX 規定されているので POSIX に準拠したどのシェルでも問題なく使えます。シェル上では which コマンドを使っても良いと思いますが、シェルスクリプトでは command -v を使う
2022/10/16 以下ご指摘をもとに内容を修正および追記 https://zenn.dev/link/comments/463223a4de9ec2 はじめに Linux上でコマンドを実行したときのコマンドライン引数についてつらつら書きたくなったので書きます。 プロセスのコマンドライン引数とは、たとえばfoo bar bazというコマンドを実行したら、通常はコマンドライン引数はfoo、bar、およびbazになります。直観的には引数は”bar”と"baz"だけのようにおもえるかもしれませんが、とにかくこういう定義です。 コマンドライン引数はプログラムの中からはCやC++ではmain関数のargv配列引数から参照できます。上述の例であればargv[0]には実行ファイル名が入ります。それ以降の"bar"はargv[1]に、"baz"はargv[2]に入っています。argvに相当する変数はシェ
以下のGIFを見てください! クレデンシャルを利用したaws cliを実行が、指紋認証だけで実現できています!このcli実行は、MFAを設定したIAM UserからIAM Roleにassume roleし、実行されています。 実現には以下の1Password Shell Pluginsを使っています。 設定してみる 公式ドキュメントに従って設定します。 注意点! MFAのワンタイムパスワードを1Passwordに設定する際に、属性名がOne-Time Passwordじゃないとプラグインが動作しません。 日本語設定しているとワンタイムパスワードという名前で作成されてしまう場合があるようです。One-Time Passwordにリネームしましょう。 感想 最高かよ。 MFAトークンの入力でいままでトータル2億年くらい時間ロスしていましたが、それが指紋認証でスッと完了します!爽快です! 余談
普段はsystemd経由で実行しているコマンドをCLIから実行したい、環境変数もsystemd経由で起動するときと同様にセットしたいのでenvfile(EnvironmentFile)をそのまま使いたいんだけどなんか微妙にやりにくくないか、と思って何度か調べたことがあるんだけど、あんまりうまい方法が検索結果に出てこない。 んだけど、あれ、これ簡単じゃん。(追記: これはごく単純なケースでしか動かなかった、後段参照) $ env $(cat myenvfile | grep -v '^#') target-commandenvfileをシェルスクリプトとして実行して追加された変数をなんとかexportすれば……みたいに考えてたけどenvコマンドで一発だった。変なコメントとか入ってると厄介だけど、こんな感じでいいのでは。ということでメモ。 空白を含む値の処理 まあいいやとスルーしてたけど値が空
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く