これを行う方法については非常に簡単な内容がありませんが、単純なスクリプトがあります。
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.tar.xz) tar xvJf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*.xz) unxz $1 ;;
*.exe) cabextract $1 ;;
*) echo "\'$1': unrecognized file compression" ;;
esac
else
echo "\'$1' is not a valid file"
fi
}
スクリプトは機能しますが、ログイン時にデフォルトで実行できないようです。
私はこの非常に徹底的な答えを見つけました。zshで独自のシェル関数を定義してロードする方法そして、関数を保存するディレクトリを表示するために$ fpathをインポートしました。
私の.zshrc設定ファイルの一番下に追加したのはfpath=( ~/.local/bin "${fpath[@]}" )
私の機能を持つパスです。
これを入力すると、次のような結果echo $fpath
が表示されます。
/home/me/.local/bin /home/me/.oh-my-zsh/plugins/git /home/me/.oh-my-zsh/functions /home/me/.oh-my-zsh/completions ...
autoload -Uz extract
ただし、ログインするたびに明示的に入力しないと機能しません。
ログイン時にディレクトリ全体を自動的にロードする方法はありますか?
答え1
スクリプトと関数を混同しています。
スクリプトの作成
スクリプトは独立したプログラムです。 zshで書くこともできますが、zshコマンドラインだけでなくどこでも呼び出すことができます。 zshコマンドラインまたは他のzshスクリプトでzshで書かれたスクリプトを実行している場合、これは偶然であり、スクリプトの動作には影響しません。スクリプトは独自のプロセスで実行され、親プロセスには影響しません(たとえば、変数や現在のディレクトリを変更することはできません)。
コードは、どこからでも呼び出すことができ、実行中のシェルの状態にアクセスする必要がない独立したタスクを実行するため、関数ではなくスクリプトである必要があります。
スクリプトは実行可能ファイルでなければなりません。chmod +x /path/to/script
.itは次に終わるはずです。シェルボーンラインカーネルにスクリプトを解釈するために使用するプログラムを教えてください。あなたの場合は、ファイルの上部に次の行を追加します。
#!/usr/bin/env zsh
変数にリストされているディレクトリにファイルを配置します$PATH
。多くのシステムがユーザーのデフォルトに設定されているため、~/bin
使用できます。追加のディレクトリを追加するには、次を参照してください。~/.local/bin
PATH
http://unix.stackexchange.com/questions/26047/how-to-Correctly-add-a-path-to-path
別名、関数、または組み込みコマンドではなくコマンド名を入力すると、シェルはその名前の実行可能ファイルを見つけて$PATH
実行します。したがって、スクリプトをシェルに宣言する必要なく正しい場所に配置するだけです。
関数を作成してください
関数は、既存のシェルインスタンス内で実行されるコードです。変数、現在のディレクトリ、関数、コマンド履歴など、すべてのシェル状態へのフルアクセス権を持ちます。互換性のあるシェルからのみ関数を呼び出すことができます。
コードは関数として機能しますが、関数で作成しても何も得られず、他の場所(ファイルマネージャなど)でコードを呼び出す機能が失われます。
zshでは、関数の定義を~/.zshrc
。.zshrc
自動ローディングは2段階で行われます。
- 関数名を宣言するために使用されます
autoload -U myfunction
。 myfunction
初めて呼び出されると、zshはmyfunction
リストされたディレクトリで名前付きファイルを見つけて、見つかった$fpath
最初のファイルをmyfunction
。
すべての機能は使用前に定義する必要があります。そのため、ファイルを$fpath
。autoload
$fpath
% autoload -U myfunction
% which myfunction
myfunction () {
# undefined
builtin autoload -XU
}
Zshには、ナビゲーションを通じてこれらのスタブを生成するメカニズムがあります$fpath
。これは完了サブシステムに含まれています。
- 置く
#autoload
ファイルの最初の行に。 - 完成システム初期化関数を呼び出す前に、完全に設定されて
.zshrc
いることを確認してください。fpath
compinit
関数定義を含むファイルには関数を含める必要があります。体、関数の定義ではありません。これは、zshが関数を呼び出すときにファイルの内容を実行するためです。したがって、コードを関数に入れるには、以下を含むディレクトリの1つextract
にあるというファイルにコードを入れます。$fpath
#autoload
if [ -f $1 ]; then
…
関数がロードされたときに初期化コードを実行したり、ヘルパー関数を定義したい場合は、このイディオム(zshディストリビューションで使用)を使用できます。補助定義およびその他の初期化コードとともに、関数定義をファイルに保存します。最後に、関数を呼び出してパラメータを渡します。これには以下がmyfunction
含まれます。
#autoload
my_auxiliary_function () {
…
}
myfunction () {
…
}
myfunction "$@"
ポリスチレン
7z x
ほとんどのアーカイブタイプで動作します。
答え2
この問題を解決する方法はいくつかあります。
- この機能を.zshrcに入れることができます。
- スクリプトを入手できます。
- 関数のコードを次のファイルに直接配置できます。タブレットPATHのディレクトリにあります。