602 Advent Calendar 2019 12日目の記事です!
概要
シェルコマンドをコピペする時、頭に「$」がついていても実行できるようにしました。
動機
Twitterにて、TLに現れた下記ツイートを見て思いつきました。(@nwtgckさん、きっかけをありがとうございます。そしてこれが初めてのQiita記事です!)
↓自分の返信「\$ コマンド」を「コマンド」として実行してくれる「\$コマンド」どこかにないかな。コピペを実行しやすくなると思うんだよね。
— Ryo Ota (@nwtgck) December 11, 2019
とても面白いですね!
— りんわしゅう🤹♂️ (@Rinwasyu) December 11, 2019
#!/bin/sh
exec \$@
と書いた$ファイルをパスの通ったところ(例えば/binの中)に置いて実行権限をつければできると思います!
背景 〜コピペコード〜
私はプログラミングの学習にWeb上の記事を活用しています。
その中で、サンプルコードが載っているサイトを使うと、コードをコピペして自分の環境で試すことができます。とても便利だと感じます。しかし、シェルコマンドのコピペをする際に困った問題があります。
$ hoge --option
$ fuga --option
このような「$」が頭についていることがある点です。おそらく、シェルのプロンプトで実行している事を示すためにこんな表記をしているのだと思います。
ですが、コピペする時に「$」までコピーして貼り付けてしまうと、実行時に
$: command not found
のようなエラーが出てしまいます。訂正をしなければならず、大変です。
解決方法
$コマンドを作りました。
中身はシェルスクリプトで、
#!/bin/sh
exec $@
と書かれています。
1行目はShebangと言うものです。(無くても動くと思いますが)
2行目、execはシェルの組み込みコマンドで、シェルプログラム自身を別のコマンドやプログラムで置き換えることができます。置き換える対象は$@で、これはシェルの特殊変数の一つで、中にコマンドの引数すべての文字列が入っています。(この場合は実行したいコマンドの文字列)
このファイルを、/binや/usr/binなど、PATHの通ったディレクトリに保存し、
chmod a+x $
などで実行権限を付与したら完成です!
使ってみた
↓Before
user@mypc:~$ $ echo "Hello World"
$: command not found
user@mypc:~$
↓After
user@mypc:~$ $ echo "Hello World"
Hello World
user@mypc:~$
Hello Worldと表示できました。
感想
面白いアイディアを簡単に実装できて楽しかったです。すでに誰かが作っているものかもしれませんが、見たことが無いものを作る、ワクワクする体験ができました。ありがとうございました。@Rinwasyu宛にリクエスト送っていただけたら他にも面白いコマンド作るかもしれません・・・w
余談
Bashなどでは、一般ユーザのプロンプトが「$」でrootユーザのプロンプトが「#」です。次はroot権限で実行できる#コマンドを作ろう・・・!と思いましたが、#はシェルスクリプトでコメントとして扱われるため無理でした。残念。
#コマンドを実行するときは
user@mypc:~$ \#
とする必要があります。