タグ付けされた質問 「shell」

シェルは、Unixのコマンドラインインターフェイスです。シェルにインタラクティブにコマンドを入力するか、スクリプトを記述してタスクを自動化できます。/ bin / shおよび最も互換性のあるシェル(ash、bash、ksh、zshなど)に適用される質問には、このタグを使用します。エラーのあるシェルスクリプトについては、ここに投稿する前にhttp://shellcheck.netで確認してください。

4
ディレクトリと相対パスへのシンボリックリンク
ディレクトリへの絶対パス(Blink)でシンボリックリンクを作成しました。たとえば次のツリーがあります。 $ ls -l /tmp/A total 0 lrwxrwxrwx 1 root root 6 Apr 3 12:27 Blink -> /tmp/B -rw-r--r-- 1 root root 0 Apr 3 12:27 foo $ ls -l /tmp/B total 0 -rw-r--r-- 1 root root 0 Apr 3 12:27 bar 次に/ tmp / Aに移動し、ディレクトリをBlinkに変更します。 $ cd /tmp/A $ …


4
クリップボードからvi対応のzshまたはbashシェルに貼り付ける
キーボードを使用して、システムクリップボード(またはテキスト選択)から「viに似た」シェルプロンプトに貼り付けることができます。私は通常zshを使用し、時にはbashを使用します。どちらの場合も、viのような動作(bindkey -v/ set -o vi)でシェルをセットアップしています。 vimでは、私が探している動作はキーシーケンスで利用可能です"+p。ただし、この特定のキーシーケンスは、vi対応のシェルプロンプトでは期待どおりに機能しません。zshまたはbashシェルプロンプトでviのようなキーバインドを維持しながら、キーボードのみを使用してこれまたは同様の動作を有効にする方法はありますか? -編集- 使用例:私は、Pentadactylアドオン、ターミナルエミュレーター、vimを使用して、Firefoxの間を頻繁に移動します。Xmonadウィンドウマネージャーとカスタムキーを使用して移動します。3つのプログラムはすべてviに似たキーバインドを備えており(「フィンガーメモリ」の場合)非常に効率的であるため、vim構文(または非常に類似した構文)のみを使用してプログラム間でテキストを通信することが理想的です。
15 bash  shell  zsh  vi  clipboard 


2
コマンド置換から末尾の改行文字はどこに行ったのですか?
次のコードは、状況を最もよく説明しています。最後の行が末尾の改行文字を出力しないのはなぜですか?各行の出力はコメントに表示されます。GNU bashバージョン4.1.5を使用しています echo -n $'a\nb\n' | xxd -p # 610a620a x=$'a\nb\n' ; echo -n "$x" | xxd -p # 610a620a echo -ne "a\nb\n" | xxd -p # 610a620a x="$(echo -ne "a\nb\n")" ; echo -n "$x" | xxd -p # 610a62

2
Unix / Linuxでプロセス間通信を傍受する方法はありますか?
ネットワークトラフィックを傍受/分析するために、Wiresharkというユーティリティがあります。 Unix / Linuxの2つのプロセス間のすべてのプロセス間通信を傍受するための同様のユーティリティはありますか? メモリ内にいくつかのプロセスを作成しましたが、それらが相互に通信する方法をプロファイルする必要があります。

7
フォルダーのタイムスタンプを最新のファイルに再帰的に変更するにはどうすればよいですか?
フォルダー内のファイルで見つかった最新のタイムスタンプに基づいてフォルダーのタイムスタンプを再帰的に変更する方法を誰かが知っているのではないかと思っていました。 たとえば、次のとおりです。 jon @ UbuntuPanther:/ media / media / MP3s / Foo Fighters /(1997-05-20)色と形$ ls -alF 合計55220 drwxr-xr-x 2 jon jon 4096 2010-08-30 12:34 ./ drwxr-xr-x 11 jon jon 4096 2010-08-30 12:34 ../ -rw-r--r-- 1 jon jon 1694044 2010-04-18 00:51 Foo Fighters-Doll.mp3 -rw-r--r-- 1 jon jon 3151170 2010-04-18 00:51 Foo …

3
コード「{exec> / dev / null; }> / dev / null」内部で何が起きているのでしょうか?
execリダイレクションを含むコマンドリストをリダイレクトする場合、exec> / dev / nullは後で適用されるようには見えません: { exec >/dev/null; } >/dev/null; echo "Hi" 「こんにちは」と印刷されます。 {}コマンドリストはパイプラインの一部でない限り、サブシェルとは見なされないためexec >/dev/null、現在のシェル環境内でコマンドリストを適用する必要があるという印象を受けました。 これを次のように変更すると: { exec >/dev/null; } 2>/dev/null; echo "Hi" 期待どおりの出力はありません。将来のコマンドでも、ファイル記述子1は/ dev / nullをポイントしたままです。これは再実行によって示されます: { exec >/dev/null; } >/dev/null; echo "Hi" 出力されません。 私は台本を作ってそれを追跡しようとしましたが、ここで何が起こっているのか正確にはわかりません。 このスクリプトの各ポイントで、STDOUTファイル記述子はどうなりますか? 編集:私のstrace出力の追加: read(255, "#!/usr/bin/env bash\n{ exec 1>/de"..., 65) = 65 open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = …

3
後で使用するために終了コードを保存
そのため、いくつかのテストを実行するための小さなスクリプトがあります。 javac *.java && java -ea Test rm -f *.class ここでの問題は、スクリプトを実行する./testと、テストがrm -f *.class成功したために失敗した場合でも、成功の終了コードを返すことです。 私が望んでいることを実現することを考えることができる唯一の方法は、私にとってい感じです: javac *.java && java -ea Test test_exit_code=$? rm -f *.class if [ "$test_exit_code" != 0 ] ; then false; fi しかし、これは一般的な問題のように見えます-タスクを実行し、クリーンアップしてから、元のタスクの終了コードを返します。 これを行う最も慣用的な方法は何ですか(bashまたは一般的なシェルのみ)?

3
xargsで引数を引用する方法
1 MBを超えるフォルダー内のすべてのファイルを削除するとします。 $ find . -size +1M | xargs -0 rm これにより、名前にスペースが含まれるファイルは削除されません。だから私はそれが送信するすべての引数を引用したいrm。場合はfind、それを与えるSome report.docxことは渡す必要があります"Some report.docx"しrm。 どうやってやるの?
15 shell  find  quoting  rm  xargs 

3
すでに転送されたsshキーをtmuxに転送するにはどうすればよいですか?
キーが保存されているマシンからSSH経由で接続し、2番目のマシンに転送してから、tmux内からキーを使用しようとしています。tmuxに入ると、転送が「ゆるい」ように見えます。tmux内からキーを使用できるように、「転送」するにはどうすればよいですか? $ ssh [server] -o ForwardAgent=yes $ git pull # Succeeds. $ /bin/bash $ git pull # Still succeeds, despite new shell. $ exit $ tmux attach $ git pull # Permission denied (publickey)
15 shell  ssh  tmux 

3
-execdirで検索
で実行するfindと-execdir、期待した結果が得られません。 例えば: mkdir -p a/b/c find . -type d -execdir touch foo \; $ tree a a ├── b │ ├── c │ └── foo └── foo ディレクトリにファイルcが含まれていませんfoo。find各ディレクトリでローカルにアクセスして何かを行うにはどうすればよいですか?

4
bashでの2つの同時コマンドを含むCtrl-C
Linuxマシンのbashで2つのコマンドを同時に実行したい。したがって、私の./execute.shbashスクリプトに次のように記述します。 command 1 & command 2 echo "done" ただし、bashスクリプトを停止してCtrl+を押したい場合はC、2番目のコマンドのみが停止します。最初のコマンドは実行を続けます。完全なbashスクリプトが停止したことを確認するにはどうすればよいですか?または、いずれにせよ、両方のコマンドを停止するにはどうすればよいですか?この場合、Ctrl+ を何度押しCてもコマンドが実行され続け、端末を閉じる必要があるためです。

2
GLOBIGNOREはどのように機能しますか?
bashのマニュアルページによると: GLOBIGNORE A colon-separated list of patterns defining the set of filenames to be ignored by pathname expansion. If a filename matched by a pathname expansion pattern also matches one of the patterns in GLOBIGNORE, it is removed from the list of matches. しかし実際には... $ bash --noprofile --norc bash-4.2$ touch …

3
シェルスクリプト-予期しないトークン「else」付近の構文エラー
次のシェルスクリプトで、エラーが発生する理由 syntax error near unexpected token `else' シェルスクリプト echo "please enter username" read user_name echo "please enter password" read -s pass echo ${ORACLE_SID} SID=${ORACLE_SID} if ["${ORACLE_SID}" != 'Test'] then sqlplus -s -l $USER_NAME/$PASS@$SID <<EOF copy from scott/tiger@orcl insert EMP using select * from EMP exit EOF else echo "Cannot copy" …

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