出力なしで「cd-」を使用します


28

cd -出力をエコーアウトせずにコマンドを実行するにはどうすればよいですか?
試しましたcd - 2>&1 /dev/nullが、それは宛先ディレクトリを印刷します。
これは、bash関数として使用したいので、不必要な出力を取得したくないためです。

回答:


32

このようにしてみてください:

cd - > /dev/null

次のこともできます。

cd - > uselessfile

これにより、出力はSTDOUTではなく「uselessfile」ファイルに送信されます。

ファイルを作成または上書きする代わりに、追加することもできます。

cd - >> uselessfile

15

@erewokはすでに質問に回答しましたが、実際に何が起こっているのか、なぜあなたがしている行動を見ているのかを説明します。

問題はリダイレクトにあります。あなたが書いています:

cd - 2>&1 /dev/null

リダイレクトはコマンドライン内のどこにでも表示できるため(のような単純なもので確認できますecho a b 2>&1 c </etc/fstab d)、リダイレクトが取り除かれた後、実際になります:

cd - /dev/null

問題が発生しましたか?cd1つの引数と2つのリダイレクトではなく、2つの引数を渡しています。一度に1つのカレントディレクトリにcdしかいられないため、最初の引数(この場合は)のみを考慮します-

あなたはおそらく意図した書き込みをすることはあるcdの/ dev / nullにstderrのとstdoutの両方のリダイレクトを使用してコマンド。それを行うには2つの方法があります。

あなたのケースで最も簡単なのは、>キャラクターを追加することで、単にリダイレクトしたいことをシェルに知らせることです。これが@erewokが提案していることです。

cd - 2>&1 >/dev/null

これは最初にstderr(ファイル記述子2)をファイル記述子1(stdout)にリダイレクトし、次にstdout(暗黙的な1)を/ dev / nullにリダイレクトします。順序が重要であることに注意してください。リダイレクトを逆にした場合、同じ結果は得られませんが、場合によっては、特定のプログラムがそれぞれの出力ストリームをどのように使用するかにより、そうするように見えることがあります。

または、@demureで提案されているように&>、この構文がシェルでサポートされている場合、両方のストリームを一度にリダイレクトするために使用できます。

cd - &>/dev/null

$OLDPWD標準エラー出力をシステムのブラックホールにリダイレクトしているため、これらの選択肢のいずれかが存在しなくなると、エラーが沈黙することに注意しください。これが懸念される場合は、$?後で確認します。本当に心配な場合は、これを自分で確認する必要がありますが、少なくとも私のテストでは、成功した後に失敗したcdcd $someplaceまたはcd -)セットです。$? = 1$? = 0


5

たぶんあなたは使うことができます

cd $OLDPWD

ただし、この場合、さらに入力する必要があります:)

ただし、利点があります。エラーがある場合、メッセージは/ dev / nullにリダイレクトされません。


1
$OLDPWDが設定されていない場合、これはにドロップされます~cd -エラーを出力します(そして、おそらくあなたが既にいた場所にあなたを残します)。
CVn

1
あなたは正しくありません。$ OLDPWDが設定されていない場合(ユーザーがこれを設定解除できるのはなぜですか)、「cd-」の結果は「cd $ OLDPWD」と同じです。マニュアルページを確認してください(「cd-」は「cd "$ OLDPWD" && pwd」と同等です)。または、テストすることができます:) 'OLDPWD = ""; cd-'-〜にドロップして〜の文字を表示します。
ウズソルト

1
私はそれをテストしました。私のシステムでは、2番目のcdでシーケンスcd /tmp bash cd -が表示さbash: cd: OLDPWD not setれます。一方、シーケンスcd /tmp bash cd $OLDPWDは〜にドロップします(ほぼ確実に、$ OLDPWDは空の文字列に展開されるため)。問題のシェル内cd $OLDPWDで少なくとも1つを行うとcd問題なく動作しますが、それまでは動作しません。
CVn

ええ、はい、あなたは正しいです。私はzshでテストしましたが、zshはエラーメッセージをドロップしません。
ウズソルト

1

stdoutとstderrのリダイレクト: cd - &>/dev/null

これ&>はの簡略版でcd - 2>/dev/null 1>&2、これを使用するつもりだったと思いますが...

  • 注:&>bash> = 4.0が必要です。

追伸 ほとんどのコマンドは場所を指すことができるため、実際に必要になる可能性は低いcd


0

次を使用できます。

cd ~-

以下のbashのmanページによるとTilde Expansion

チルダ接頭辞が `〜-'の場合、シェル変数OLDPWDの値が設定されていれば、それが置き換えられます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.