これが重要かどうかはわかりませんが、サブシェルを作成できます:
$ (cd /var/log && cp -- *.log ~/Desktop)
ディレクトリはそのサブシェルに対してのみ変更されるため、 cd -
する必要がある作業を回避できます
一部のプログラムには、chdir(2) に指示できるオプションがあります。 それ自体 (例:GNU tar の -C
/--directory
).
ただし、そのようなプログラムの外では、chdir する必要があります。 .シェルに実行させる代わりに、ある種のコンパイル済み「バイナリ」プログラムを作成して使用することもできますが、おそらくあまりメリットはありません。
別の回答のコメントで、例を挙げました:
execindirectory -d /var/log "cp *.log ~/Desktop"
*.log
以降 パターンはシェル自体によって展開されます (cp ではありません) )、何かを chdir する必要があります シェルにコマンドを評価させる前にディレクトリに移動します。
「cd back」する必要がないようにしたい場合は、サブシェルを使用して cd の効果を分離できます。 作業中のシェル インスタンスから。
(cd /path/to/dir && some command)
これをシェル関数にパッケージ化できます (私は -d
を削除しました)。 ディレクトリが実際にオプションである場合、このコマンドにはほとんど意味がないため、使用例のオプションです。)
runindir() { (cd "$1" && shift && eval "[email protected]"); }
runindir /var/log 'cp *.log ~/Desktop' # your example
runindir /var/log cp \*.log \~/Desktop # eval takes multiple args
runindir /var/log cp \*.log ~/Desktop # it is okay to expand tilde first
他の人が与えた回答の価値を損なうものではありませんが、あなたが望んでいるのは これです:
(cd /path/to && ./executable [ARGS])
cd
を呼び出す括弧に注意してください サブシェルで。