どこからでもスクリプトを実行


8

私はスクリプトを持っています:

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

それはここにあります:/home/myuser/bin/abspath.shこれは実行権限を持っています。

実行するecho $PATHと、次のようになります。/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

任意のディレクトリからabspath <some_path_here>、自分のスクリプトを呼び出すことができるようにしたいと思います。私はbashを使用していますが、何を間違っていますか?

回答:


30

入力したいのですabspathが、プログラムの名前はabspath.shです。問題は、それがPATHにあるかどうかではなく、単にその名前を使用して呼び出していないという事実です。

次の2つのオプションがあります。

  1. abspath.sh代わりに入力してください。
  2. プログラムの名前をに変更しabspathます。

1
...またはsimlinkを作成しますcd $HOME/bin ; ln -s abspath.sh abspath。これにより、スクリプトの正しい拡張子を維持し、好きな名前のツールを使用できます。(
将来的に

またはエイリアスを作成します。
ジェニーD

6

このコードは十分に小さいので、シェル関数としてコード化します。

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

そして、はい、あなたはそれらすべての引用符が欲しいです。


4

.bashrcファイルにコマンドを追加して、エイリアスを設定します。

alias abspath='sh /home/myuser/bin/abspath.sh'

そして、ファイルを調達することを忘れないでください。


1
なぜここにsudoが欲しいのですか?
CVn 2016年

1
sudoを不必要に使用するのは明らかに間違っているため、十分な評判がある場合は反対票を投じます。一部の人々は、いつ、なぜそれが必要なのかを学ぶのではなく、すべてにsudoを自動的に使用しているようです。
Scott Severance 2016年

皆さんに同意します。そして、私はsudoをいつ使うべきか知っています。質問全体が見えませんでした。
Balasekhar Nelli、2016

2

bashスクリプトの名前を変更abspathして、binディレクトリに移動します。abspathその後はどこからでも通話できます


0

3番目のオプションは、abspath.shスクリプトを指すabspathと呼ばれるエイリアスを作成することです。


5
受け入れられたソリューションが説明するように修正された場合は必要ありませんが、かなり複雑であり、実際に対処するのではなく問題を隠します。
dawud

議論する価値はありませんが、1つのソリューションで解決する場合、別のソリューションを適用する必要がないことは言うまでもありません。はい、これはバンドエイドソリューションであり、シェルスクリプトを直接参照することがより理想的な修正です。
トカマク2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.