次のタスクを実行するためのスクリプトを作成しようとしています。 Lynx ブックマークからマグネットリンクを抽出し、カールコマンドの一部として使用します。このように:
curl http://my_ip:my_port_number/startdownload/magnet_link
マグネットリンクを取得するには、次のものが必要です。
lynx -dump -hiddenlinks=listonly lynx_bookmarks.html | grep "magnet" | sed 's/&.*//' | cut -c 7-
しかし、2つの部分を一緒に貼り付けてスクリプトを作成する方法がわかりません。
アドバイスをお願いしますか?
しかし、私はこの分野に完全アマチュアであり、改善できる部分があると確信しています。
答え1
したがって、あるコマンドの出力をキャプチャして別のコマンドに使用する必要があります。 bash $(..)構文を使用すると、コマンドを実行して出力をキャプチャしてから、他のコマンドで使用できます。
1つの方法は、出力を変数としてキャプチャすることです。たとえば、次のようになります。
shortcut=$(lynx -dump -hiddenlinks=listonly lynx_bookmarks.html | grep magnet | sed 's/&.*//' | cut -c 7-)
curl "$shortcut"
あるいは、出力を直接使用することもできます。
curl $(lynx -dump -hiddenlinks=listonly lynx_bookmarks.html | grep "magnet" | sed 's/&.*//' | cut -c 7-)
どちらを選ぶかによって好みが変わります。コマンドの出力が複数回必要な場合は、出力を変数としてキャプチャしてそこで使用することをお勧めします。
答え2
次の行をスクリプトファイルに入力します(例:ad mydownload.sh)。
magnet=$(lynx -dump -hiddenlinks=listonly lynx_bookmarks.html | grep "magnet" | sed 's/&.*//' | cut -c 7-)
curl http://my_ip:my_port_number/startdownload/${magnet}
保存と終了
chmod 755 mydownload.sh
./mydownload.sh
答え3
bash-4.1$ echo $( echo hi )
hi
bash-4.1$
だから、
curl $( ... )
これらのコマンドをサブシェルとして実行して、...
すべての出力を渡します。読み取り可能なヘッダーであり、入れ子にはされませんが、バックティックを使用して作成することもできます。curl
$()
grep | sed
たぶん正しい呼び出しを一度に置き換えることができますawk
。