14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

シェルスクリプトで、受け取った引数をすべて別のコマンドに渡す

Last updated at Posted at 2019-01-18

bash のシェル・スクリプトが受け取った引数を、内部で別のコマンドに「丸ごと引数を渡したい」。問題はスペース入りの引数があること。

例えば bash スクリプト hoge.sh で、$ ./hoge.sh arg1 arg2 arg3 ... と、受け取った「引数の個数が不特定」の内容をスクリプト内のコマンドにまんま渡したい

パースと言うより、プロクシというか、むしろパスする感じ。

bash 受け取った引数 すべて 渡す』を Qiita 記事に絞ってググっても、bash 引数 すべて 渡す 受け取り」 とググっても、タイトルからピンポイントで判断できなかったので、未来でもエンジニアよりは猿人にえんじん近いnear、検索猿人な自分へのググラビリティ備忘録として。

TL; DR (今北産業)

  1. 引数の値は特殊変数「@」に格納されています。
  2. "$@"」とダブル・クォート付きで(引数の要素ごとのまま)再利用できます。
  3. コマンド名が長い場合や、コマンドに渡す前に事前処理するのに便利です。
short.sh
#!/bin/bash

# 受け取ったスクリプトの引数の内容を、丸ごと別のコマンドに渡す
/bin/bash /path/to/very_long_script_name.sh "$@"

動作確認み環境

  • macOS Mojave(OSX 10.14.2, OSX 10.14.4)
    • GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
  • Raspbian GNU/Linux 8 (jessie)
    • GNU bash, バージョン 4.3.30(1)-release (arm-unknown-linux-gnueabihf)

TS; DR (長いコマンド名を短くしたいんです)

長いと言うより、どうも「覚えにくいコマンド名を俺様ネーミングで使いたかった」のです。

単純なコマンドのリネームであれば、.bash_profile などに alias コマンドを使うのが楽です。

しかし、単純なエイリアスでなく、前処理を少しゴニョゴニョしてから別コマンドに渡したいのです。具体的には、mdless1 コマンドを md にリネームしたいのです。

md
#!/usr/bin/env bash

# 下ごしらえ
....

# 実行
mdless "$@"

参考文献&あわせて読みたい

  1. mdlessとは、Ruby 製の Markdown ビューアーで、コマンドライン(ターミナル)上で Markdown ファイルを整形して表示してくれるコマンドです。

14
14
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
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?