質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

1845閲覧

bash上で&をエスケープする

Kommm

総合スコア20

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

1グッド

1クリップ

投稿2018/11/13 17:18

編集2018/11/14 00:45

前提・実現したいこと

bashでスクリプトに&を含む引数を渡したい
(URLをそのまま引数で渡したいから。クオーテーションで囲む等は不可。)

発生している問題・エラーメッセージ

&をエスケープできず、&以降を次のコマンドと認識してしまう

該当のソースコード

下記などを行ったが失敗。

echo "$*"; printf %q "$value"

やりたい事

youtubeのURLを引数として、pythonスクリプトに渡したい

bashrc に

function test() { url = "$1"; /usr/hoge.py url; }

とかき、コマンドから

test https://www.youtube.com/watch?v=Xk7Hx9eNrmU&list=PL6aPGboerlUbzriVchhj_z9UOztHFZSx2

と叩けば、hoge.pyにurlが送られるようにしようと考えていました

本当に必要なのはlist以下の部分です。しかしyoutube以外の利用も想定しているため、list以下を引数にわたすのではなく、やはり全文字列を引数に渡したいと考えています。

URLの端に""を入れたくないのは、URLを大量に想定しているからです・・・人力で""をうつのを回避したいためです

もし、逆に""を自動で追記できる方法があれば最高なのですが・・・

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

(URLをそのまま引数で渡したいから。クオーテーションで囲む等は不可。)

であれば、不可能です。

シェルスクリプトには、&の前までしか渡されません。
受け取ってない物は、どうしようもない。

やりたい事を具体的に書くと、何か別の案があるかも。

投稿2018/11/14 00:33

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kommm

2018/11/14 00:40

やはりそうですよね、function内で次コマンドの文字列も受け付ける方法があれば嬉しかったのですが・・・ やりたい事の具体例を追記しましたのでご確認ください
otn

2018/11/14 01:10

大量のURLは何処にあるのでしょうか? ファイルにあるなら、エディターで簡単なので、クリップボードですかね? そうなら、Pythonスクリプトからクリップボードにアクセする方法を調べた方がいい気がします。
otn

2018/11/14 01:12

あるいは、 function test1() { read url /usr/hoge.py "$url" } で、標準入力から与えるとか。
Kommm

2018/11/14 02:30

これですね!全く思いつきませんでした! readこそ一番想定の動きに近いです というのも、実は私用ではなくリテラシーが低い方のために使うツールになるため、テキストに貼り付けて〜などではなく一々コピペしたURLを貼り付ける必要があったのです 本当にありがとうございました
guest

0

こんな感じで行けると思いますが。

$ cat test.sh echo $1 $ bash test.sh 'http://example.com/hoge?a=1&b=2' http://example.com/hoge?a=1&b=2

投稿2018/11/13 18:06

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kommm

2018/11/13 22:51

申し訳ないです、説明不足でした(追記もしました) 生リンクで行う事を期待していますので、bashを走らせる際にURLの端にクオーテーションを入れて文字列にしない場合を想定しています トライしたコードなら$や"などはエスケープできるんです、しかし&だけは・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問