LoginSignup
4
0

More than 3 years have passed since last update.

シェルコマンドをコピペした時の "$: command not found" エラーをなくすために「$コマンド」を作った

Posted at

602 Advent Calendar 2019 12日目の記事です!

概要

シェルコマンドをコピペする時、頭に「\$」がついていても実行できるようにしました。

動機

Twitterにて、TLに現れた下記ツイートを見て思いつきました。(@nwtgckさん、きっかけをありがとうございます。そしてこれが初めてのQiita記事です!)


↓自分の返信

背景 〜コピペコード〜

私はプログラミングの学習に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:~$ \#

とする必要があります。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0