問題はプログラムへのパスを保存していないことです。どのように私はパスがわからないbashでプログラムを開きますか
#!/bin/bash
read -p "Enter progam name: " name
path=which $name
nano $path
問題はプログラムへのパスを保存していないことです。どのように私はパスがわからないbashでプログラムを開きますか
#!/bin/bash
read -p "Enter progam name: " name
path=which $name
nano $path
which
の代わりにfind
を使用してください。
path=$(find /some/base/path -type f -name "${name}")
path=which $name
これは、あなたが必要な構文ではありません。これにより、$name
に格納されたコマンドが呼び出され、その環境に変数path=which
が追加されます。 path="which $name"
のように引用した場合は、ご使用の環境にpath
を設定しますが、文字列はwhich ...
(...は$name
の値)です。
あなたが探しているものは、command substitutionです。コマンドの出力をキャプチャできます。だからではなく、あなたが行う必要があります。
path="$(which "$name")"
これは、あなたが望むものであるwhich "$name"
の結果にpath
を設定します。コメントで示唆したように
あなたは完全にpath
変数をスキップして、ちょうど言うことができます。
nano "$(which "$name")"
あなたも、完全にあなたが構文を思い出し、そしてちょうど入る気にしないと仮定すると、このスクリプトをスキップすることができます。
$ nano "$(which command-to-look-at)"
プロンプトで直接。あなたはより堅牢な何かをしたい場合は
他の道を行く、あなたはそれが機能ではなくスクリプトです気づく(このようなもので開口部binary filesを避けることができ、あなたが直接あなたの.bashrc
にそれを追加したり、身体を引き出すことができます)ご希望の場合は別のスクリプトへ:
inspect_command() {
local name="${1:?No command provided}"
local path
path=$(which "$name") || {
echo "No command '$name' found"
return 1
}
if [[ "$(file --brief --mime-encoding "$path")" == "binary" ]]; then
echo "$path appears to be a binary file."
local response;
read -p "Are you sure you'd like to continue? [y/N] " response;
[[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]] || return 0
fi
"${EDITOR:-nano}" "$path"
}
これは、引数としてコマンドを渡し、1が設定されている場合、それはあなたの優先EDITOR
を使用していますが)(テキストファイルに上記と同じ動作をしますが、あなたを警告バイナリファイルを開こうとする前に。
$ inspect_command curl
/usr/bin/curl appears to be a binary file.
Are you sure you'd like to continue? [y/N] n
$ inspect_command some_script.sh
... opens nano
'nano" $(curl) ''のようなものを実行する意味はなんですか?これはバイナリファイルです。だから、普通のファイル、テキストファイル、普通のファイルを 'PATH'に入れない(nanoで編集しようとしている)と考えています。 'which'も普通のファイルのパスを取得するのに使うことができますが、この場合は' PATH'を更新する必要があります。これはまさに知られていません。 – Azize
そうですね、それは必ずしも意味のあることではありません。 *バイナリではなく、検査するのが面白いプログラムはたくさんあります。 OPは上記のように "*私はちょうどそれらを見てみたい*"。 – dimo414
@Azizeバイナリコマンドを正常に処理する拡張機能を追加しました。実際にスクリプトである平均 'PATH'には多くのコマンドがあります。あなたが見ていると、あなたが期待する以上のものを見つけることができると確信しています。 – dimo414
私はそれらを見るのが好きです。 –
@janos 'どの'はバイナリだけでなく、どの実行可能ファイルでも動作します。 @MreeMでは 'pathname = $(which $ name)'のように 'which $ name'ビットの周りに' $() 'を使うことができます。 "' 'nano" $(which $ name) "を使用することもできます。" – JNevill
@janosバッククォートの提案を削除するためにコメント/回答を更新しました。コメントanywaのコードブロック内の例をここに表示するのは難しいです。 – JNevill